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.
5 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
7 #include "base/time/time.h"
8 #include "chrome/browser/chromeos/drive/drive.pb.h"
9 #include "chrome/browser/drive/drive_api_util.h"
10 #include "google_apis/drive/drive_api_parser.h"
11 #include "testing/gtest/include/gtest/gtest.h"
17 base::Time GetTestTime() {
18 // 2011-12-14-T00:40:47.330Z
19 base::Time::Exploded exploded;
22 exploded.day_of_month = 14;
23 exploded.day_of_week = 2; // Tuesday
27 exploded.millisecond = 330;
28 return base::Time::FromUTCExploded(exploded);
33 TEST(ResourceEntryConversionTest, ConvertToResourceEntry_File) {
34 google_apis::FileResource file_resource;
35 file_resource.set_title("File 1.mp3");
36 file_resource.set_file_id("resource_id");
37 file_resource.set_created_date(GetTestTime());
38 file_resource.set_modified_date(
39 GetTestTime() + base::TimeDelta::FromSeconds(10));
40 file_resource.set_mime_type("audio/mpeg");
41 file_resource.set_alternate_link(GURL("https://file_link_alternate"));
42 file_resource.set_file_size(892721);
43 file_resource.set_md5_checksum("3b4382ebefec6e743578c76bbd0575ce");
46 std::string parent_resource_id;
47 EXPECT_TRUE(ConvertFileResourceToResourceEntry(
48 file_resource, &entry, &parent_resource_id));
50 EXPECT_EQ(file_resource.title(), entry.title());
51 EXPECT_EQ(file_resource.title(), entry.base_name());
52 EXPECT_EQ(file_resource.file_id(), entry.resource_id());
53 EXPECT_EQ("", parent_resource_id);
55 EXPECT_FALSE(entry.deleted());
56 EXPECT_FALSE(entry.shared_with_me());
57 EXPECT_FALSE(entry.shared());
59 EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
60 entry.file_info().last_modified());
61 // Last accessed value equal to 0 means that the file has never been viewed.
62 EXPECT_EQ(0, entry.file_info().last_accessed());
63 EXPECT_EQ(file_resource.created_date().ToInternalValue(),
64 entry.file_info().creation_time());
66 EXPECT_EQ(file_resource.mime_type(),
67 entry.file_specific_info().content_mime_type());
68 EXPECT_FALSE(entry.file_specific_info().is_hosted_document());
69 EXPECT_EQ(file_resource.alternate_link().spec(),
70 entry.file_specific_info().alternate_url());
72 // Regular file specific fields.
73 EXPECT_EQ(file_resource.file_size(), entry.file_info().size());
74 EXPECT_EQ(file_resource.md5_checksum(), entry.file_specific_info().md5());
75 EXPECT_FALSE(entry.file_info().is_directory());
78 TEST(ResourceEntryConversionTest,
79 ConvertFileResourceToResourceEntry_HostedDocument) {
80 google_apis::FileResource file_resource;
81 file_resource.set_title("Document 1");
82 file_resource.set_file_id("resource_id");
83 file_resource.set_created_date(GetTestTime());
84 file_resource.set_modified_date(
85 GetTestTime() + base::TimeDelta::FromSeconds(10));
86 file_resource.set_last_viewed_by_me_date(
87 GetTestTime() + base::TimeDelta::FromSeconds(20));
88 file_resource.set_mime_type(util::kGoogleDocumentMimeType);
89 file_resource.set_alternate_link(GURL("https://file_link_alternate"));
92 std::string parent_resource_id;
93 EXPECT_TRUE(ConvertFileResourceToResourceEntry(
94 file_resource, &entry, &parent_resource_id));
96 EXPECT_EQ(file_resource.title(), entry.title());
97 EXPECT_EQ(file_resource.title() + ".gdoc",
98 entry.base_name()); // The suffix added.
99 EXPECT_EQ(".gdoc", entry.file_specific_info().document_extension());
100 EXPECT_EQ(file_resource.file_id(), entry.resource_id());
101 EXPECT_EQ("", parent_resource_id);
103 EXPECT_FALSE(entry.deleted());
104 EXPECT_FALSE(entry.shared_with_me());
105 EXPECT_FALSE(entry.shared());
107 EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
108 entry.file_info().last_modified());
109 EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
110 entry.file_info().last_accessed());
111 EXPECT_EQ(file_resource.created_date().ToInternalValue(),
112 entry.file_info().creation_time());
114 EXPECT_EQ(file_resource.mime_type(),
115 entry.file_specific_info().content_mime_type());
116 EXPECT_TRUE(entry.file_specific_info().is_hosted_document());
117 EXPECT_EQ(file_resource.alternate_link().spec(),
118 entry.file_specific_info().alternate_url());
120 // The size should be 0 for a hosted document.
121 EXPECT_EQ(0, entry.file_info().size());
122 EXPECT_FALSE(entry.file_info().is_directory());
125 TEST(ResourceEntryConversionTest,
126 ConvertFileResourceToResourceEntry_Directory) {
127 google_apis::FileResource file_resource;
128 file_resource.set_title("Folder");
129 file_resource.set_file_id("resource_id");
130 file_resource.set_created_date(GetTestTime());
131 file_resource.set_modified_date(
132 GetTestTime() + base::TimeDelta::FromSeconds(10));
133 file_resource.set_last_viewed_by_me_date(
134 GetTestTime() + base::TimeDelta::FromSeconds(20));
135 file_resource.set_mime_type(util::kDriveFolderMimeType);
137 google_apis::ParentReference parent;
138 parent.set_file_id("parent_resource_id");
139 file_resource.mutable_parents()->push_back(parent);
142 std::string parent_resource_id;
143 EXPECT_TRUE(ConvertFileResourceToResourceEntry(
144 file_resource, &entry, &parent_resource_id));
146 EXPECT_EQ(file_resource.title(), entry.title());
147 EXPECT_EQ(file_resource.title(), entry.base_name());
148 EXPECT_EQ(file_resource.file_id(), entry.resource_id());
149 // The parent resource ID should be obtained as this is a sub directory
150 // under a non-root directory.
151 EXPECT_EQ(parent.file_id(), parent_resource_id);
153 EXPECT_FALSE(entry.deleted());
154 EXPECT_FALSE(entry.shared_with_me());
155 EXPECT_FALSE(entry.shared());
157 EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
158 entry.file_info().last_modified());
159 EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
160 entry.file_info().last_accessed());
161 EXPECT_EQ(file_resource.created_date().ToInternalValue(),
162 entry.file_info().creation_time());
164 EXPECT_TRUE(entry.file_info().is_directory());
167 TEST(ResourceEntryConversionTest,
168 ConvertFileResourceToResourceEntry_DeletedHostedDocument) {
169 google_apis::FileResource file_resource;
170 file_resource.set_title("Document 1");
171 file_resource.set_file_id("resource_id");
172 file_resource.set_created_date(GetTestTime());
173 file_resource.set_modified_date(
174 GetTestTime() + base::TimeDelta::FromSeconds(10));
175 file_resource.set_last_viewed_by_me_date(
176 GetTestTime() + base::TimeDelta::FromSeconds(20));
177 file_resource.set_mime_type(util::kGoogleDocumentMimeType);
178 file_resource.set_alternate_link(GURL("https://file_link_alternate"));
179 file_resource.mutable_labels()->set_trashed(true);
182 std::string parent_resource_id;
183 EXPECT_TRUE(ConvertFileResourceToResourceEntry(
184 file_resource, &entry, &parent_resource_id));
186 EXPECT_EQ(file_resource.title(), entry.title());
187 EXPECT_EQ(file_resource.title() + ".gdoc", entry.base_name());
188 EXPECT_EQ(file_resource.file_id(), entry.resource_id());
189 EXPECT_EQ("", parent_resource_id);
191 EXPECT_TRUE(entry.deleted()); // The document was deleted.
192 EXPECT_FALSE(entry.shared_with_me());
193 EXPECT_FALSE(entry.shared());
195 EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
196 entry.file_info().last_modified());
197 EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
198 entry.file_info().last_accessed());
199 EXPECT_EQ(file_resource.created_date().ToInternalValue(),
200 entry.file_info().creation_time());
202 EXPECT_EQ(file_resource.mime_type(),
203 entry.file_specific_info().content_mime_type());
204 EXPECT_TRUE(entry.file_specific_info().is_hosted_document());
205 EXPECT_EQ(file_resource.alternate_link().spec(),
206 entry.file_specific_info().alternate_url());
208 // The size should be 0 for a hosted document.
209 EXPECT_EQ(0, entry.file_info().size());
212 TEST(ResourceEntryConversionTest, ConvertChangeResourceToResourceEntry) {
213 google_apis::ChangeResource change_resource;
214 change_resource.set_file(make_scoped_ptr(new google_apis::FileResource));
215 change_resource.set_file_id("resource_id");
216 change_resource.set_modification_date(GetTestTime());
218 google_apis::FileResource* file_resource = change_resource.mutable_file();
219 file_resource->set_title("File 1.mp3");
220 file_resource->set_file_id("resource_id");
223 std::string parent_resource_id;
224 EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
225 change_resource, &entry, &parent_resource_id));
227 EXPECT_EQ(change_resource.file_id(), entry.resource_id());
228 EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
229 entry.modification_date());
231 EXPECT_EQ(file_resource->title(), entry.title());
232 EXPECT_EQ(file_resource->title(), entry.base_name());
233 EXPECT_EQ("", parent_resource_id);
235 EXPECT_FALSE(entry.deleted());
238 TEST(ResourceEntryConversionTest,
239 ConvertChangeResourceToResourceEntry_Trashed) {
240 google_apis::ChangeResource change_resource;
241 change_resource.set_file(make_scoped_ptr(new google_apis::FileResource));
242 change_resource.set_file_id("resource_id");
243 change_resource.set_modification_date(GetTestTime());
245 google_apis::FileResource* file_resource = change_resource.mutable_file();
246 file_resource->set_title("File 1.mp3");
247 file_resource->set_file_id("resource_id");
248 file_resource->mutable_labels()->set_trashed(true);
251 std::string parent_resource_id;
252 EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
253 change_resource, &entry, &parent_resource_id));
255 EXPECT_EQ(change_resource.file_id(), entry.resource_id());
256 EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
257 entry.modification_date());
259 EXPECT_EQ(file_resource->title(), entry.title());
260 EXPECT_EQ(file_resource->title(), entry.base_name());
261 EXPECT_EQ("", parent_resource_id);
263 EXPECT_TRUE(entry.deleted());
266 TEST(ResourceEntryConversionTest,
267 ConvertChangeResourceToResourceEntry_Deleted) {
268 google_apis::ChangeResource change_resource;
269 change_resource.set_deleted(true);
270 change_resource.set_file_id("resource_id");
271 change_resource.set_modification_date(GetTestTime());
274 std::string parent_resource_id;
275 EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
276 change_resource, &entry, &parent_resource_id));
278 EXPECT_EQ(change_resource.file_id(), entry.resource_id());
279 EXPECT_EQ("", parent_resource_id);
281 EXPECT_TRUE(entry.deleted());
283 EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
284 entry.modification_date());
287 TEST(ResourceEntryConversionTest,
288 ConvertFileResourceToResourceEntry_SharedWithMeEntry) {
289 google_apis::FileResource file_resource;
290 file_resource.set_shared(true);
291 file_resource.set_shared_with_me_date(GetTestTime());
294 std::string parent_resource_id;
295 EXPECT_TRUE(ConvertFileResourceToResourceEntry(
296 file_resource, &entry, &parent_resource_id));
297 EXPECT_TRUE(entry.shared_with_me());
298 EXPECT_TRUE(entry.shared());
301 TEST(ResourceEntryConversionTest, ToPlatformFileInfo) {
303 entry.mutable_file_info()->set_size(12345);
304 entry.mutable_file_info()->set_is_directory(true);
305 entry.mutable_file_info()->set_is_symbolic_link(true);
306 entry.mutable_file_info()->set_creation_time(999);
307 entry.mutable_file_info()->set_last_modified(123456789);
308 entry.mutable_file_info()->set_last_accessed(987654321);
310 base::File::Info file_info;
311 ConvertResourceEntryToFileInfo(entry, &file_info);
312 EXPECT_EQ(entry.file_info().size(), file_info.size);
313 EXPECT_EQ(entry.file_info().is_directory(), file_info.is_directory);
314 EXPECT_EQ(entry.file_info().is_symbolic_link(), file_info.is_symbolic_link);
315 EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().creation_time()),
316 file_info.creation_time);
317 EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().last_modified()),
318 file_info.last_modified);
319 EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().last_accessed()),
320 file_info.last_accessed);
323 TEST(ResourceEntryConversionTest,
324 ConvertFileResourceToResourceEntry_ImageMediaMetadata) {
325 google_apis::FileResource entry_all_fields;
326 google_apis::FileResource entry_zero_fields;
327 google_apis::FileResource entry_no_fields;
329 entry_all_fields.mutable_image_media_metadata()->set_width(640);
330 entry_all_fields.mutable_image_media_metadata()->set_height(480);
331 entry_all_fields.mutable_image_media_metadata()->set_rotation(90);
333 entry_zero_fields.mutable_image_media_metadata()->set_width(0);
334 entry_zero_fields.mutable_image_media_metadata()->set_height(0);
335 entry_zero_fields.mutable_image_media_metadata()->set_rotation(0);
339 std::string parent_resource_id;
340 EXPECT_TRUE(ConvertFileResourceToResourceEntry(
341 entry_all_fields, &entry, &parent_resource_id));
342 EXPECT_EQ(640, entry.file_specific_info().image_width());
343 EXPECT_EQ(480, entry.file_specific_info().image_height());
344 EXPECT_EQ(90, entry.file_specific_info().image_rotation());
348 std::string parent_resource_id;
349 EXPECT_TRUE(ConvertFileResourceToResourceEntry(
350 entry_zero_fields, &entry, &parent_resource_id));
351 EXPECT_TRUE(entry.file_specific_info().has_image_width());
352 EXPECT_TRUE(entry.file_specific_info().has_image_height());
353 EXPECT_TRUE(entry.file_specific_info().has_image_rotation());
354 EXPECT_EQ(0, entry.file_specific_info().image_width());
355 EXPECT_EQ(0, entry.file_specific_info().image_height());
356 EXPECT_EQ(0, entry.file_specific_info().image_rotation());
360 std::string parent_resource_id;
361 EXPECT_TRUE(ConvertFileResourceToResourceEntry(
362 entry_no_fields, &entry, &parent_resource_id));
363 EXPECT_FALSE(entry.file_specific_info().has_image_width());
364 EXPECT_FALSE(entry.file_specific_info().has_image_height());
365 EXPECT_FALSE(entry.file_specific_info().has_image_rotation());