PageRenderTime 49ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/test/RTMAPITaskTest.m

https://github.com/mootoh/milpon
Objective C | 438 lines | 327 code | 94 blank | 17 comment | 5 complexity | 480a3637dabd4765bd093755b174ab9a MD5 | raw file
  1. //
  2. // RTMAPITaskTest.m
  3. // Milpon
  4. //
  5. // Created by mootoh on 8/31/08.
  6. // Copyright 2008 deadbeaf.org. All rights reserved.
  7. //
  8. #import <SenTestingKit/SenTestingKit.h>
  9. #import "RTMAPI.h"
  10. #import "RTMAPI+Task.h"
  11. #import "RTMAPI+Timeline.h"
  12. #import "RTMAPI+Location.h"
  13. #import "PrivateInfo.h"
  14. #import "MPLogger.h"
  15. #import "MPHelper.h"
  16. @interface RTMAPITaskTest : SenTestCase {
  17. RTMAPI *api;
  18. }
  19. @end
  20. @implementation RTMAPITaskTest
  21. - (void) setUp
  22. {
  23. api = [[RTMAPI alloc] init];
  24. api.token = RTM_TOKEN_D;
  25. }
  26. - (void) tearDown
  27. {
  28. api.token = nil;
  29. [api release];
  30. }
  31. #pragma mark Helpers
  32. - (void) deleteTask:(NSDictionary *)task timeline:(NSString *)timeline
  33. {
  34. NSString *task_id = [[task objectForKey:@"task"] objectForKey:@"id"];
  35. NSString *taskseries_id = [task objectForKey:@"id"];
  36. NSString *list_id = [task objectForKey:@"list_id"];
  37. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timeline];
  38. }
  39. #pragma mark -
  40. - (void) _testGetList
  41. {
  42. NSArray *tasks = [api getTaskList];
  43. STAssertNotNil(tasks, @"task getList should not be nil");
  44. STAssertTrue([tasks count] > 0, @"tasks should be one or more.");
  45. }
  46. - (void) _testGetListForID
  47. {
  48. NSArray *tasks = [api getTaskList:@"8698547" filter:nil lastSync:nil];
  49. STAssertTrue([tasks count] > 0, @"tasks in Inbox should be one or more.");
  50. }
  51. - (void) _testGetLastSync
  52. {
  53. NSString *lastSync = @"2010-06-05T08:27:05Z";
  54. NSArray *tasks = [api getTaskList:nil filter:nil lastSync:lastSync];
  55. STAssertTrue([tasks count] > 0, @"tasks from lastSync %@ should be one or more.", lastSync);
  56. }
  57. - (void) _testGetWithFilter
  58. {
  59. NSString *filter = @"isTagged:true";
  60. NSArray *tasks = [api getTaskList:nil filter:filter lastSync:nil];
  61. STAssertTrue([tasks count] > 0, @"tasks with tag should be one or more.");
  62. }
  63. - (void) _testAddAndDelete
  64. {
  65. NSString *name = @"testAdd";
  66. NSString *timeline = [api createTimeline];
  67. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timeline];
  68. STAssertNotNil(addedTask, @"");
  69. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  70. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  71. NSString *list_id = [addedTask objectForKey:@"list_id"];
  72. STAssertNotNil(task_id, nil);
  73. STAssertNotNil(taskseries_id, nil);
  74. STAssertNotNil(list_id, nil);
  75. NSString *deletedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  76. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timeline];
  77. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:deletedDateString];
  78. LOG(@"after deletion: %@", taskserieses);
  79. }
  80. - (void) _testAddAndSetDueDateThenDelete
  81. {
  82. NSString *name = @"testAddAndSetDueDate";
  83. NSString *timelineAdd = [api createTimeline];
  84. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  85. STAssertNotNil(addedTask, nil);
  86. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  87. NSString *timelineSetDueDate = [api createTimeline];
  88. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  89. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  90. NSString *list_id = [addedTask objectForKey:@"list_id"];
  91. NSString *due = @"2010-07-01T22:13:00Z";
  92. [api setTaskDueDate:due timeline:timelineSetDueDate list_id:list_id taskseries_id:taskseries_id task_id:task_id has_due_time:NO parse:NO];
  93. {
  94. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  95. LOG(@"taskserieses = %@", taskserieses);
  96. STAssertEquals([taskserieses count], 1U, nil);
  97. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  98. NSString *dueSpecified = [[[taskseries objectForKey:@"tasks"] objectAtIndex:0] objectForKey:@"due"];
  99. STAssertTrue([dueSpecified isEqualToString:due], nil);
  100. NSString *dueHasTime = [[[taskseries objectForKey:@"tasks"] objectAtIndex:0] objectForKey:@"has_due_time"];
  101. STAssertTrue([dueHasTime isEqualToString:@"0"], nil);
  102. }
  103. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineSetDueDate];
  104. }
  105. - (void) _testAddAndLocatoin
  106. {
  107. NSSet *locations = [api getLocations];
  108. STAssertTrue([locations count] > 0, nil);
  109. NSString *name = @"testAddAndLocation";
  110. NSString *timelineAdd = [api createTimeline];
  111. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  112. STAssertNotNil(addedTask, nil);
  113. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  114. NSString *timelineSetLocation = [api createTimeline];
  115. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  116. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  117. NSString *list_id = [addedTask objectForKey:@"list_id"];
  118. [api setTaskLocation:[[locations anyObject] objectForKey:@"id"] timeline:timelineSetLocation list_id:list_id taskseries_id:taskseries_id task_id:task_id];
  119. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  120. STAssertEquals([taskserieses count], 1U, nil);
  121. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  122. NSString *location_id = [taskseries objectForKey:@"location_id"];
  123. STAssertTrue([location_id isEqualToString:[[locations anyObject] objectForKey:@"id"]], nil);
  124. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineSetLocation];
  125. }
  126. - (void) _testAddAndPriority
  127. {
  128. NSString *name = @"testAddAndPriority";
  129. NSString *timelineAdd = [api createTimeline];
  130. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  131. STAssertNotNil(addedTask, nil);
  132. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  133. NSString *timelineSetPriority = [api createTimeline];
  134. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  135. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  136. NSString *list_id = [addedTask objectForKey:@"list_id"];
  137. NSString *priority = @"1";
  138. [api setTaskPriority:priority timeline:timelineSetPriority list_id:list_id taskseries_id:taskseries_id task_id:task_id];
  139. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  140. STAssertEquals([taskserieses count], 1U, nil);
  141. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  142. NSString *pri = [[[taskseries objectForKey:@"tasks"] objectAtIndex:0] objectForKey:@"priority"];
  143. STAssertTrue([priority isEqualToString:pri], nil);
  144. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineSetPriority];
  145. }
  146. - (void) _testAddAndEstimate
  147. {
  148. NSString *name = @"testAddAndEstimate";
  149. NSString *timelineAdd = [api createTimeline];
  150. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  151. STAssertNotNil(addedTask, nil);
  152. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  153. NSString *timelineSetEstimate = [api createTimeline];
  154. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  155. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  156. NSString *list_id = [addedTask objectForKey:@"list_id"];
  157. NSString *estimate = @"1 hours";
  158. [api setTaskEstimate:estimate timeline:timelineSetEstimate list_id:list_id taskseries_id:taskseries_id task_id:task_id];
  159. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  160. STAssertEquals([taskserieses count], 1U, nil);
  161. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  162. NSString *est = [[[taskseries objectForKey:@"tasks"] objectAtIndex:0] objectForKey:@"estimate"];
  163. STAssertTrue([estimate isEqualToString:est], nil);
  164. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineSetEstimate];
  165. }
  166. - (void) _testAddAndComplete
  167. {
  168. NSString *name = @"testAddAndComplete";
  169. NSString *timelineAdd = [api createTimeline];
  170. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  171. STAssertNotNil(addedTask, nil);
  172. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  173. NSString *timelineComplete = [api createTimeline];
  174. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  175. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  176. NSString *list_id = [addedTask objectForKey:@"list_id"];
  177. [api completeTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineComplete];
  178. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  179. STAssertEquals([taskserieses count], 1U, nil);
  180. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  181. NSString *completed = [[[taskseries objectForKey:@"tasks"] objectAtIndex:0] objectForKey:@"completed"];
  182. STAssertTrue(completed && ![completed isEqualToString:@""], nil);
  183. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineComplete];
  184. }
  185. - (void) _testAddAndCompleteAndUncomplete
  186. {
  187. // add
  188. NSString *name = @"testAddAndComplete";
  189. NSString *timelineAdd = [api createTimeline];
  190. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  191. STAssertNotNil(addedTask, nil);
  192. // complete
  193. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  194. NSString *timelineComplete = [api createTimeline];
  195. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  196. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  197. NSString *list_id = [addedTask objectForKey:@"list_id"];
  198. [api completeTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineComplete];
  199. {
  200. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  201. STAssertEquals([taskserieses count], 1U, nil);
  202. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  203. NSString *completed = [[[taskseries objectForKey:@"tasks"] objectAtIndex:0] objectForKey:@"completed"];
  204. STAssertTrue(completed && ![completed isEqualToString:@""], nil);
  205. }
  206. // uncomplete
  207. NSString *uncompletedDatestring = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  208. [api uncompleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineComplete];
  209. {
  210. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:uncompletedDatestring];
  211. STAssertEquals([taskserieses count], 1U, nil);
  212. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  213. NSString *completed = [[[taskseries objectForKey:@"tasks"] objectAtIndex:0] objectForKey:@"completed"];
  214. STAssertTrue(completed && [completed isEqualToString:@""], nil);
  215. }
  216. // clean up
  217. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineComplete];
  218. }
  219. - (void) _testAddAndSetTags
  220. {
  221. NSString *name = @"testAddAndSetTags";
  222. NSString *timelineAdd = [api createTimeline];
  223. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  224. STAssertNotNil(addedTask, nil);
  225. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  226. NSString *timelineSetTags = [api createTimeline];
  227. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  228. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  229. NSString *list_id = [addedTask objectForKey:@"list_id"];
  230. NSSet *tags = [NSSet setWithObjects:@"fuga", @"hoge", @"moge", nil];
  231. NSString *tagString = @"";
  232. for (NSString *tag in tags)
  233. tagString = [tagString stringByAppendingFormat:@",%@", tag];
  234. [api setTaskTags:tagString task_id:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineSetTags];
  235. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  236. STAssertEquals([taskserieses count], 1U, nil);
  237. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  238. NSSet *tagsAssigned = [taskseries objectForKey:@"tags"];
  239. STAssertTrue([tags isEqualToSet:tagsAssigned], nil);
  240. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineSetTags];
  241. }
  242. - (void) _testAddAndMoveTo
  243. {
  244. NSString *name = @"testAddAndMoveTo";
  245. NSString *timelineAdd = [api createTimeline];
  246. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  247. STAssertNotNil(addedTask, nil);
  248. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  249. NSString *timelineMoveTo = [api createTimeline];
  250. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  251. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  252. NSString *from_list_id = [addedTask objectForKey:@"list_id"];
  253. NSString *to_list_id = @"8698547"; // somewhere
  254. [api moveTaskTo:to_list_id from_list_id:from_list_id task_id:task_id taskseries_id:taskseries_id timeline:timelineMoveTo];
  255. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  256. STAssertEquals([taskserieses count], 1U, nil);
  257. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  258. NSString *moved_list_id = [taskseries objectForKey:@"list_id"];
  259. STAssertTrue([moved_list_id isEqualToString:to_list_id], nil);
  260. [api deleteTask:task_id taskseries_id:taskseries_id list_id:moved_list_id timeline:timelineMoveTo];
  261. }
  262. - (void) _testAddAndSetName
  263. {
  264. NSString *name = @"testAddAndSetName";
  265. NSString *timelineAdd = [api createTimeline];
  266. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  267. STAssertNotNil(addedTask, nil);
  268. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  269. NSString *timelineSetName = [api createTimeline];
  270. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  271. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  272. NSString *list_id = [addedTask objectForKey:@"list_id"];
  273. NSString *nameTo = @"testAddAndSetNameRenamed";
  274. [api setTaskName:nameTo timeline:timelineSetName list_id:list_id taskseries_id:taskseries_id task_id:task_id];
  275. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  276. STAssertEquals([taskserieses count], 1U, nil);
  277. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  278. NSString *renamedName = [taskseries objectForKey:@"name"];
  279. STAssertTrue([renamedName isEqualToString:nameTo], nil);
  280. [api deleteTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineSetName];
  281. }
  282. - (void) _testSetRecurrence
  283. {
  284. NSString *name = @"testSetRecurrence";
  285. NSString *timelineAdd = [api createTimeline];
  286. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  287. STAssertNotNil(addedTask, nil);
  288. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  289. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  290. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  291. NSString *list_id = [addedTask objectForKey:@"list_id"];
  292. NSString *recurrence = @"Every day";
  293. [api setRecurrence:recurrence timeline:timelineAdd list_id:list_id taskseries_id:taskseries_id task_id:task_id];
  294. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  295. STAssertEquals([taskserieses count], 1U, nil);
  296. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  297. NSDictionary *rrule = [taskseries objectForKey:@"rrule"];
  298. LOG(@"rrule = %@", rrule);
  299. STAssertEquals(1, [[rrule objectForKey:@"every"] integerValue], nil);
  300. STAssertTrue([[rrule objectForKey:@"rule"] isEqualToString:@"FREQ=DAILY;INTERVAL=1"], nil);
  301. // clean up
  302. [self deleteTask:addedTask timeline:timelineAdd];
  303. }
  304. - (void) _testSetDueAndRecurrenceThenComplete
  305. {
  306. // add
  307. NSString *name = @"testSetRecurrence";
  308. NSString *timelineAdd = [api createTimeline];
  309. NSDictionary *addedTask = [api addTask:name list_id:nil timeline:timelineAdd];
  310. NSString *addedDateString = [[MilponHelper sharedHelper] dateToRtmString:[NSDate date]];
  311. STAssertNotNil(addedTask, nil);
  312. // set Due
  313. NSString *timelineSetDueDate = [api createTimeline];
  314. NSString *task_id = [[addedTask objectForKey:@"task"] objectForKey:@"id"];
  315. NSString *taskseries_id = [addedTask objectForKey:@"id"];
  316. NSString *list_id = [addedTask objectForKey:@"list_id"];
  317. NSString *due = @"2010-07-01T22:13:00Z";
  318. [api setTaskDueDate:due timeline:timelineSetDueDate list_id:list_id taskseries_id:taskseries_id task_id:task_id has_due_time:NO parse:NO];
  319. // set recurrence
  320. NSString *recurrence = @"Every day";
  321. [api setRecurrence:recurrence timeline:timelineAdd list_id:list_id taskseries_id:taskseries_id task_id:task_id];
  322. // complete it
  323. [api completeTask:task_id taskseries_id:taskseries_id list_id:list_id timeline:timelineAdd];
  324. NSArray *taskserieses = [api getTaskList:nil filter:nil lastSync:addedDateString];
  325. STAssertEquals([taskserieses count], 1U, nil);
  326. NSDictionary *taskseries = [taskserieses objectAtIndex:0];
  327. NSDictionary *rrule = [taskseries objectForKey:@"rrule"];
  328. STAssertEquals(1, [[rrule objectForKey:@"every"] integerValue], nil);
  329. STAssertTrue([[rrule objectForKey:@"rule"] isEqualToString:@"FREQ=DAILY;INTERVAL=1"], nil);
  330. // clean up
  331. for (NSDictionary *task in [taskseries objectForKey:@"tasks"])
  332. [api deleteTask:[task objectForKey:@"id"] taskseries_id:[taskseries objectForKey:@"id"] list_id:[taskseries objectForKey:@"list_id"] timeline:timelineAdd];
  333. }
  334. #if 0
  335. - (void) testAddInList_and_Delete
  336. {
  337. RTMAPITask *api_task = [[[RTMAPITask alloc] init] autorelease];
  338. NSDictionary *ids = [api_task add:@"task add from API specifying list." inList:@"4922895"];
  339. STAssertNotNil([ids valueForKey:@"taskseries_id"], @"check created taskseries id");
  340. STAssertNotNil([ids valueForKey:@"task_id"], @"check created task id");
  341. STAssertTrue([api_task delete:[ids valueForKey:@"task_id"] inTaskSeries:[ids valueForKey:@"taskseries_id"] inList:[ids valueForKey:@"list_id"]], @"check delete");
  342. }
  343. #endif // 0
  344. @end