drive_api_parser_unittest.cc 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "google_apis/drive/drive_api_parser.h"
  5. #include "base/time/time.h"
  6. #include "base/values.h"
  7. #include "google_apis/common/test_util.h"
  8. #include "google_apis/common/time_util.h"
  9. #include "testing/gtest/include/gtest/gtest.h"
  10. namespace google_apis {
  11. // Test about resource parsing.
  12. TEST(DriveAPIParserTest, AboutResourceParser) {
  13. std::string error;
  14. std::unique_ptr<base::Value> document =
  15. test_util::LoadJSONFile("drive/about.json");
  16. ASSERT_TRUE(document.get());
  17. ASSERT_EQ(base::Value::Type::DICTIONARY, document->type());
  18. std::unique_ptr<AboutResource> resource(new AboutResource());
  19. EXPECT_TRUE(resource->Parse(*document));
  20. EXPECT_EQ("0AIv7G8yEYAWHUk9123", resource->root_folder_id());
  21. EXPECT_EQ(5368709120LL, resource->quota_bytes_total());
  22. EXPECT_EQ(1073741824LL, resource->quota_bytes_used_aggregate());
  23. EXPECT_EQ(8177LL, resource->largest_change_id());
  24. }
  25. // Test Team Drive resource parsing.
  26. TEST(DriveAPIParserTest, TeamDriveResourceParser) {
  27. std::unique_ptr<base::Value> document =
  28. test_util::LoadJSONFile("drive/team_drive.json");
  29. ASSERT_TRUE(document.get());
  30. ASSERT_EQ(base::Value::Type::DICTIONARY, document->type());
  31. std::unique_ptr<TeamDriveResource> resource(new TeamDriveResource());
  32. EXPECT_TRUE(resource->Parse(*document));
  33. EXPECT_EQ("TestTeamDriveId", resource->id());
  34. EXPECT_EQ("My Team", resource->name());
  35. const TeamDriveCapabilities& capabilities = resource->capabilities();
  36. EXPECT_TRUE(capabilities.can_add_children());
  37. EXPECT_TRUE(capabilities.can_comment());
  38. EXPECT_TRUE(capabilities.can_copy());
  39. EXPECT_TRUE(capabilities.can_delete_team_drive());
  40. EXPECT_TRUE(capabilities.can_download());
  41. EXPECT_TRUE(capabilities.can_edit());
  42. EXPECT_TRUE(capabilities.can_list_children());
  43. EXPECT_TRUE(capabilities.can_manage_members());
  44. EXPECT_TRUE(capabilities.can_read_revisions());
  45. EXPECT_TRUE(capabilities.can_remove_children());
  46. EXPECT_TRUE(capabilities.can_rename());
  47. EXPECT_TRUE(capabilities.can_rename_team_drive());
  48. EXPECT_TRUE(capabilities.can_share());
  49. }
  50. TEST(DriveAPIParserTest, TeamDriveListParser) {
  51. std::unique_ptr<base::Value> document(
  52. test_util::LoadJSONFile("drive/team_drive_list.json"));
  53. ASSERT_TRUE(document.get());
  54. EXPECT_TRUE(TeamDriveList::HasTeamDriveListKind(*document));
  55. ASSERT_EQ(base::Value::Type::DICTIONARY, document->type());
  56. std::unique_ptr<TeamDriveList> resource(new TeamDriveList());
  57. EXPECT_TRUE(resource->Parse(*document));
  58. EXPECT_EQ(3U, resource->items().size());
  59. EXPECT_EQ("theNextPageToken", resource->next_page_token());
  60. }
  61. // Test file list parsing.
  62. TEST(DriveAPIParserTest, FileListParser) {
  63. std::string error;
  64. std::unique_ptr<base::Value> document =
  65. test_util::LoadJSONFile("drive/filelist.json");
  66. ASSERT_TRUE(document.get());
  67. ASSERT_EQ(base::Value::Type::DICTIONARY, document->type());
  68. std::unique_ptr<FileList> filelist(new FileList);
  69. EXPECT_TRUE(filelist->Parse(*document));
  70. EXPECT_EQ(GURL("https://www.googleapis.com/drive/v2/files?pageToken=EAIaggEL"
  71. "EgA6egpi96It9mH_____f_8AAP__AAD_okhU-cHLz83KzszMxsjMzs_RyNGJ"
  72. "nridyrbHs7u9tv8AAP__AP7__n__AP8AokhU-cHLz83KzszMxsjMzs_RyNGJ"
  73. "nridyrbHs7u9tv8A__4QZCEiXPTi_wtIgTkAAAAAngnSXUgCDEAAIgsJPgar"
  74. "t10AAAAABC"),
  75. filelist->next_link());
  76. ASSERT_EQ(3U, filelist->items().size());
  77. // Check file 1 (a regular file)
  78. const FileResource& file1 = *filelist->items()[0];
  79. EXPECT_EQ("0B4v7G8yEYAWHUmRrU2lMS2hLABC", file1.file_id());
  80. EXPECT_EQ("\"WtRjAPZWbDA7_fkFjc5ojsEvDEF/MTM0MzM2NzgwMDIXYZ\"", file1.etag());
  81. EXPECT_EQ("My first file data", file1.title());
  82. EXPECT_EQ("application/octet-stream", file1.mime_type());
  83. EXPECT_FALSE(file1.labels().is_trashed());
  84. EXPECT_FALSE(file1.labels().is_starred());
  85. EXPECT_FALSE(file1.shared());
  86. EXPECT_EQ(640, file1.image_media_metadata().width());
  87. EXPECT_EQ(480, file1.image_media_metadata().height());
  88. EXPECT_EQ(90, file1.image_media_metadata().rotation());
  89. base::Time created_time;
  90. ASSERT_TRUE(
  91. util::GetTimeFromString("2012-07-24T08:51:16.570Z", &created_time));
  92. EXPECT_EQ(created_time, file1.created_date());
  93. base::Time modified_time;
  94. ASSERT_TRUE(
  95. util::GetTimeFromString("2012-07-27T05:43:20.269Z", &modified_time));
  96. EXPECT_EQ(modified_time, file1.modified_date());
  97. base::Time modified_by_me_time;
  98. ASSERT_TRUE(util::GetTimeFromString("2012-07-27T05:30:20.269Z",
  99. &modified_by_me_time));
  100. EXPECT_EQ(modified_by_me_time, file1.modified_by_me_date());
  101. EXPECT_EQ("team_drive_id_1", file1.team_drive_id());
  102. ASSERT_EQ(1U, file1.parents().size());
  103. EXPECT_EQ("0B4v7G8yEYAWHYW1OcExsUVZLABC", file1.parents()[0].file_id());
  104. EXPECT_EQ("d41d8cd98f00b204e9800998ecf8427e", file1.md5_checksum());
  105. EXPECT_EQ(1000U, file1.file_size());
  106. EXPECT_FALSE(file1.IsHostedDocument());
  107. EXPECT_EQ(GURL("https://docs.google.com/file/d/"
  108. "0B4v7G8yEYAWHUmRrU2lMS2hLABC/edit"),
  109. file1.alternate_link());
  110. ASSERT_EQ(1U, file1.open_with_links().size());
  111. EXPECT_EQ("1234567890", file1.open_with_links()[0].app_id);
  112. EXPECT_EQ(GURL("http://open_with_link/url"),
  113. file1.open_with_links()[0].open_url);
  114. const FileResourceCapabilities& capabilities = file1.capabilities();
  115. EXPECT_FALSE(capabilities.can_add_children());
  116. EXPECT_TRUE(capabilities.can_change_restricted_download());
  117. EXPECT_TRUE(capabilities.can_comment());
  118. EXPECT_TRUE(capabilities.can_copy());
  119. EXPECT_TRUE(capabilities.can_delete());
  120. EXPECT_TRUE(capabilities.can_download());
  121. EXPECT_TRUE(capabilities.can_edit());
  122. EXPECT_FALSE(capabilities.can_list_children());
  123. EXPECT_TRUE(capabilities.can_move_item_into_team_drive());
  124. EXPECT_FALSE(capabilities.can_move_team_drive_item());
  125. EXPECT_TRUE(capabilities.can_read_revisions());
  126. EXPECT_FALSE(capabilities.can_read_team_drive());
  127. EXPECT_FALSE(capabilities.can_remove_children());
  128. EXPECT_TRUE(capabilities.can_rename());
  129. EXPECT_TRUE(capabilities.can_share());
  130. EXPECT_TRUE(capabilities.can_trash());
  131. EXPECT_TRUE(capabilities.can_untrash());
  132. // Check file 2 (a Google Document)
  133. const FileResource& file2 = *filelist->items()[1];
  134. EXPECT_EQ("Test Google Document", file2.title());
  135. EXPECT_EQ("application/vnd.google-apps.document", file2.mime_type());
  136. EXPECT_EQ("team_drive_id_2", file2.team_drive_id());
  137. EXPECT_TRUE(file2.labels().is_trashed());
  138. EXPECT_TRUE(file2.labels().is_starred());
  139. EXPECT_TRUE(file2.shared());
  140. EXPECT_EQ(-1, file2.image_media_metadata().width());
  141. EXPECT_EQ(-1, file2.image_media_metadata().height());
  142. EXPECT_EQ(-1, file2.image_media_metadata().rotation());
  143. base::Time shared_with_me_time;
  144. ASSERT_TRUE(util::GetTimeFromString("2012-07-27T04:54:11.030Z",
  145. &shared_with_me_time));
  146. EXPECT_EQ(shared_with_me_time, file2.shared_with_me_date());
  147. EXPECT_EQ(-1, file2.file_size());
  148. EXPECT_TRUE(file2.IsHostedDocument());
  149. ASSERT_EQ(0U, file2.parents().size());
  150. EXPECT_EQ(0U, file2.open_with_links().size());
  151. EXPECT_EQ(GURL("https://drive.google.com/share"
  152. "?id=1Pc8jzfU1ErbN_eucMMqdqzY3eBm0v8sxXm_1CtLxABC"
  153. "&embedOrigin=chrome-extension://test&hl=ja"),
  154. file2.share_link());
  155. // Check file 3 (a folder)
  156. const FileResource& file3 = *filelist->items()[2];
  157. EXPECT_EQ(-1, file3.file_size());
  158. EXPECT_FALSE(file3.IsHostedDocument());
  159. EXPECT_EQ("TestFolder", file3.title());
  160. EXPECT_EQ("application/vnd.google-apps.folder", file3.mime_type());
  161. EXPECT_EQ("", file3.team_drive_id());
  162. ASSERT_TRUE(file3.IsDirectory());
  163. EXPECT_FALSE(file3.shared());
  164. ASSERT_EQ(1U, file3.parents().size());
  165. EXPECT_EQ("0AIv7G8yEYAWHUk9ABC", file3.parents()[0].file_id());
  166. EXPECT_EQ(0U, file3.open_with_links().size());
  167. }
  168. // Test change list parsing.
  169. TEST(DriveAPIParserTest, ChangeListParser) {
  170. std::string error;
  171. std::unique_ptr<base::Value> document =
  172. test_util::LoadJSONFile("drive/changelist.json");
  173. ASSERT_TRUE(document.get());
  174. ASSERT_EQ(base::Value::Type::DICTIONARY, document->type());
  175. std::unique_ptr<ChangeList> changelist(new ChangeList);
  176. EXPECT_TRUE(changelist->Parse(*document));
  177. EXPECT_EQ("https://www.googleapis.com/drive/v2/changes?pageToken=8929",
  178. changelist->next_link().spec());
  179. EXPECT_EQ(13664, changelist->largest_change_id());
  180. ASSERT_EQ(5U, changelist->items().size());
  181. const ChangeResource& change1 = *changelist->items()[0];
  182. EXPECT_EQ(8421, change1.change_id());
  183. EXPECT_EQ(ChangeResource::FILE, change1.type());
  184. EXPECT_FALSE(change1.is_deleted());
  185. EXPECT_EQ("1Pc8jzfU1ErbN_eucMMqdqzY3eBm0v8sxXm_1CtLxABC", change1.file_id());
  186. EXPECT_EQ(change1.file_id(), change1.file()->file_id());
  187. EXPECT_FALSE(change1.file()->shared());
  188. EXPECT_EQ(change1.file()->modified_date(), change1.modification_date());
  189. const ChangeResource& change2 = *changelist->items()[1];
  190. EXPECT_EQ(8424, change2.change_id());
  191. EXPECT_EQ(ChangeResource::FILE, change2.type());
  192. EXPECT_FALSE(change2.is_deleted());
  193. EXPECT_EQ("0B4v7G8yEYAWHUmRrU2lMS2hLABC", change2.file_id());
  194. EXPECT_EQ(change2.file_id(), change2.file()->file_id());
  195. EXPECT_TRUE(change2.file()->shared());
  196. EXPECT_EQ(change2.file()->modified_date(), change2.modification_date());
  197. const ChangeResource& change3 = *changelist->items()[2];
  198. EXPECT_EQ(8429, change3.change_id());
  199. EXPECT_EQ(ChangeResource::FILE, change3.type());
  200. EXPECT_FALSE(change3.is_deleted());
  201. EXPECT_EQ("0B4v7G8yEYAWHYW1OcExsUVZLABC", change3.file_id());
  202. EXPECT_EQ(change3.file_id(), change3.file()->file_id());
  203. EXPECT_FALSE(change3.file()->shared());
  204. EXPECT_EQ(change3.file()->modified_date(), change3.modification_date());
  205. // Deleted entry.
  206. const ChangeResource& change4 = *changelist->items()[3];
  207. EXPECT_EQ(8430, change4.change_id());
  208. EXPECT_EQ(ChangeResource::FILE, change4.type());
  209. EXPECT_EQ("ABCv7G8yEYAWHc3Y5X0hMSkJYXYZ", change4.file_id());
  210. EXPECT_TRUE(change4.is_deleted());
  211. base::Time modification_time;
  212. ASSERT_TRUE(
  213. util::GetTimeFromString("2012-07-27T12:34:56.789Z", &modification_time));
  214. EXPECT_EQ(modification_time, change4.modification_date());
  215. // Team Drive entry.
  216. const ChangeResource& change5 = *changelist->items()[4];
  217. EXPECT_EQ(8431, change5.change_id());
  218. EXPECT_EQ(ChangeResource::TEAM_DRIVE, change5.type());
  219. EXPECT_EQ("id-of-team-drive-test-data", change5.team_drive()->id());
  220. EXPECT_EQ("id-of-team-drive-test-data", change5.team_drive_id());
  221. EXPECT_FALSE(change5.is_deleted());
  222. ASSERT_TRUE(
  223. util::GetTimeFromString("2017-07-27T12:34:56.789Z", &modification_time));
  224. EXPECT_EQ(modification_time, change5.modification_date());
  225. // capabilities resource inside team_drive should be parsed
  226. EXPECT_TRUE(change5.team_drive()->capabilities().can_share());
  227. }
  228. // Test change list parsing.
  229. TEST(DriveAPIParserTest, ChangeListParserWithStartToken) {
  230. std::string error;
  231. std::unique_ptr<base::Value> document = test_util::LoadJSONFile(
  232. "drive/changelist_with_new_start_page_token.json");
  233. ASSERT_TRUE(document.get());
  234. ASSERT_EQ(base::Value::Type::DICTIONARY, document->type());
  235. std::unique_ptr<ChangeList> changelist = ChangeList::CreateFrom(*document);
  236. EXPECT_TRUE(changelist);
  237. EXPECT_EQ("13665", changelist->new_start_page_token());
  238. EXPECT_EQ(13664, changelist->largest_change_id());
  239. ASSERT_EQ(1U, changelist->items().size());
  240. const ChangeResource& change1 = *changelist->items()[0];
  241. EXPECT_EQ(8421, change1.change_id());
  242. EXPECT_EQ(ChangeResource::FILE, change1.type());
  243. EXPECT_FALSE(change1.is_deleted());
  244. EXPECT_EQ("1Pc8jzfU1ErbN_eucMMqdqzY3eBm0v8sxXm_1CtLxABC", change1.file_id());
  245. EXPECT_EQ(change1.file_id(), change1.file()->file_id());
  246. EXPECT_FALSE(change1.file()->shared());
  247. EXPECT_EQ(change1.file()->modified_date(), change1.modification_date());
  248. }
  249. TEST(DriveAPIParserTest, HasKind) {
  250. std::unique_ptr<base::Value> change_list_json(
  251. test_util::LoadJSONFile("drive/changelist.json"));
  252. std::unique_ptr<base::Value> file_list_json(
  253. test_util::LoadJSONFile("drive/filelist.json"));
  254. EXPECT_TRUE(ChangeList::HasChangeListKind(*change_list_json));
  255. EXPECT_FALSE(ChangeList::HasChangeListKind(*file_list_json));
  256. EXPECT_FALSE(FileList::HasFileListKind(*change_list_json));
  257. EXPECT_TRUE(FileList::HasFileListKind(*file_list_json));
  258. }
  259. TEST(DriveAPIParserTest, StartPageToken) {
  260. std::unique_ptr<base::Value> document(
  261. test_util::LoadJSONFile("drive/start_page_token.json"));
  262. ASSERT_TRUE(document.get());
  263. ASSERT_EQ(base::Value::Type::DICTIONARY, document->type());
  264. std::unique_ptr<StartPageToken> resource =
  265. StartPageToken::CreateFrom(*document);
  266. EXPECT_EQ("15734", resource->start_page_token());
  267. }
  268. } // namespace google_apis