Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / drive / resource_entry_conversion_unittest.cc
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
5 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
6
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"
12
13 namespace drive {
14
15 namespace {
16
17 base::Time GetTestTime() {
18   // 2011-12-14-T00:40:47.330Z
19   base::Time::Exploded exploded;
20   exploded.year = 2011;
21   exploded.month = 12;
22   exploded.day_of_month = 14;
23   exploded.day_of_week = 2;  // Tuesday
24   exploded.hour = 0;
25   exploded.minute = 40;
26   exploded.second = 47;
27   exploded.millisecond = 330;
28   return base::Time::FromUTCExploded(exploded);
29 }
30
31 }  // namespace
32
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");
44
45   ResourceEntry entry;
46   std::string parent_resource_id;
47   EXPECT_TRUE(ConvertFileResourceToResourceEntry(
48       file_resource, &entry, &parent_resource_id));
49
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);
54
55   EXPECT_FALSE(entry.deleted());
56   EXPECT_FALSE(entry.shared_with_me());
57   EXPECT_FALSE(entry.shared());
58
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());
65
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());
71
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());
76 }
77
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"));
90   // Do not set file size to represent a hosted document.
91
92   ResourceEntry entry;
93   std::string parent_resource_id;
94   EXPECT_TRUE(ConvertFileResourceToResourceEntry(
95       file_resource, &entry, &parent_resource_id));
96
97   EXPECT_EQ(file_resource.title(), entry.title());
98   EXPECT_EQ(file_resource.title() + ".gdoc",
99             entry.base_name());  // The suffix added.
100   EXPECT_EQ(".gdoc", entry.file_specific_info().document_extension());
101   EXPECT_EQ(file_resource.file_id(), entry.resource_id());
102   EXPECT_EQ("", parent_resource_id);
103
104   EXPECT_FALSE(entry.deleted());
105   EXPECT_FALSE(entry.shared_with_me());
106   EXPECT_FALSE(entry.shared());
107
108   EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
109             entry.file_info().last_modified());
110   EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
111             entry.file_info().last_accessed());
112   EXPECT_EQ(file_resource.created_date().ToInternalValue(),
113             entry.file_info().creation_time());
114
115   EXPECT_EQ(file_resource.mime_type(),
116             entry.file_specific_info().content_mime_type());
117   EXPECT_TRUE(entry.file_specific_info().is_hosted_document());
118   EXPECT_EQ(file_resource.alternate_link().spec(),
119             entry.file_specific_info().alternate_url());
120
121   // The size should be 0 for a hosted document.
122   EXPECT_EQ(0, entry.file_info().size());
123   EXPECT_FALSE(entry.file_info().is_directory());
124 }
125
126 TEST(ResourceEntryConversionTest,
127      ConvertFileResourceToResourceEntry_Directory) {
128   google_apis::FileResource file_resource;
129   file_resource.set_title("Folder");
130   file_resource.set_file_id("resource_id");
131   file_resource.set_created_date(GetTestTime());
132   file_resource.set_modified_date(
133       GetTestTime() + base::TimeDelta::FromSeconds(10));
134   file_resource.set_last_viewed_by_me_date(
135       GetTestTime() + base::TimeDelta::FromSeconds(20));
136   file_resource.set_mime_type(util::kDriveFolderMimeType);
137
138   google_apis::ParentReference parent;
139   parent.set_file_id("parent_resource_id");
140   file_resource.mutable_parents()->push_back(parent);
141
142   ResourceEntry entry;
143   std::string parent_resource_id;
144   EXPECT_TRUE(ConvertFileResourceToResourceEntry(
145       file_resource, &entry, &parent_resource_id));
146
147   EXPECT_EQ(file_resource.title(), entry.title());
148   EXPECT_EQ(file_resource.title(), entry.base_name());
149   EXPECT_EQ(file_resource.file_id(), entry.resource_id());
150   // The parent resource ID should be obtained as this is a sub directory
151   // under a non-root directory.
152   EXPECT_EQ(parent.file_id(), parent_resource_id);
153
154   EXPECT_FALSE(entry.deleted());
155   EXPECT_FALSE(entry.shared_with_me());
156   EXPECT_FALSE(entry.shared());
157
158   EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
159             entry.file_info().last_modified());
160   EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
161             entry.file_info().last_accessed());
162   EXPECT_EQ(file_resource.created_date().ToInternalValue(),
163             entry.file_info().creation_time());
164
165   EXPECT_TRUE(entry.file_info().is_directory());
166 }
167
168 TEST(ResourceEntryConversionTest,
169      ConvertFileResourceToResourceEntry_DeletedHostedDocument) {
170   google_apis::FileResource file_resource;
171   file_resource.set_title("Document 1");
172   file_resource.set_file_id("resource_id");
173   file_resource.set_created_date(GetTestTime());
174   file_resource.set_modified_date(
175       GetTestTime() + base::TimeDelta::FromSeconds(10));
176   file_resource.set_last_viewed_by_me_date(
177       GetTestTime() + base::TimeDelta::FromSeconds(20));
178   file_resource.set_mime_type(util::kGoogleDocumentMimeType);
179   file_resource.set_alternate_link(GURL("https://file_link_alternate"));
180   file_resource.mutable_labels()->set_trashed(true);
181
182   ResourceEntry entry;
183   std::string parent_resource_id;
184   EXPECT_TRUE(ConvertFileResourceToResourceEntry(
185       file_resource, &entry, &parent_resource_id));
186
187   EXPECT_EQ(file_resource.title(), entry.title());
188   EXPECT_EQ(file_resource.title() + ".gdoc", entry.base_name());
189   EXPECT_EQ(file_resource.file_id(), entry.resource_id());
190   EXPECT_EQ("", parent_resource_id);
191
192   EXPECT_TRUE(entry.deleted());  // The document was deleted.
193   EXPECT_FALSE(entry.shared_with_me());
194   EXPECT_FALSE(entry.shared());
195
196   EXPECT_EQ(file_resource.modified_date().ToInternalValue(),
197             entry.file_info().last_modified());
198   EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(),
199             entry.file_info().last_accessed());
200   EXPECT_EQ(file_resource.created_date().ToInternalValue(),
201             entry.file_info().creation_time());
202
203   EXPECT_EQ(file_resource.mime_type(),
204             entry.file_specific_info().content_mime_type());
205   EXPECT_TRUE(entry.file_specific_info().is_hosted_document());
206   EXPECT_EQ(file_resource.alternate_link().spec(),
207             entry.file_specific_info().alternate_url());
208
209   // The size should be 0 for a hosted document.
210   EXPECT_EQ(0, entry.file_info().size());
211 }
212
213 TEST(ResourceEntryConversionTest, ConvertChangeResourceToResourceEntry) {
214   google_apis::ChangeResource change_resource;
215   change_resource.set_file(make_scoped_ptr(new google_apis::FileResource));
216   change_resource.set_file_id("resource_id");
217   change_resource.set_modification_date(GetTestTime());
218
219   google_apis::FileResource* file_resource = change_resource.mutable_file();
220   file_resource->set_title("File 1.mp3");
221   file_resource->set_file_id("resource_id");
222   // Set dummy file size to declare that this is a regular file.
223   file_resource->set_file_size(12345);
224
225   ResourceEntry entry;
226   std::string parent_resource_id;
227   EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
228       change_resource, &entry, &parent_resource_id));
229
230   EXPECT_EQ(change_resource.file_id(), entry.resource_id());
231   EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
232             entry.modification_date());
233
234   EXPECT_EQ(file_resource->title(), entry.title());
235   EXPECT_EQ(file_resource->title(), entry.base_name());
236   EXPECT_EQ("", parent_resource_id);
237
238   EXPECT_FALSE(entry.deleted());
239 }
240
241 TEST(ResourceEntryConversionTest,
242      ConvertChangeResourceToResourceEntry_Trashed) {
243   google_apis::ChangeResource change_resource;
244   change_resource.set_file(make_scoped_ptr(new google_apis::FileResource));
245   change_resource.set_file_id("resource_id");
246   change_resource.set_modification_date(GetTestTime());
247
248   google_apis::FileResource* file_resource = change_resource.mutable_file();
249   file_resource->set_title("File 1.mp3");
250   file_resource->set_file_id("resource_id");
251   // Set dummy file size to declare that this is a regular file.
252   file_resource->set_file_size(12345);
253   file_resource->mutable_labels()->set_trashed(true);
254
255   ResourceEntry entry;
256   std::string parent_resource_id;
257   EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
258       change_resource, &entry, &parent_resource_id));
259
260   EXPECT_EQ(change_resource.file_id(), entry.resource_id());
261   EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
262             entry.modification_date());
263
264   EXPECT_EQ(file_resource->title(), entry.title());
265   EXPECT_EQ(file_resource->title(), entry.base_name());
266   EXPECT_EQ("", parent_resource_id);
267
268   EXPECT_TRUE(entry.deleted());
269 }
270
271 TEST(ResourceEntryConversionTest,
272      ConvertChangeResourceToResourceEntry_Deleted) {
273   google_apis::ChangeResource change_resource;
274   change_resource.set_deleted(true);
275   change_resource.set_file_id("resource_id");
276   change_resource.set_modification_date(GetTestTime());
277
278   ResourceEntry entry;
279   std::string parent_resource_id;
280   EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
281       change_resource, &entry, &parent_resource_id));
282
283   EXPECT_EQ(change_resource.file_id(), entry.resource_id());
284   EXPECT_EQ("", parent_resource_id);
285
286   EXPECT_TRUE(entry.deleted());
287
288   EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
289             entry.modification_date());
290 }
291
292 TEST(ResourceEntryConversionTest,
293      ConvertFileResourceToResourceEntry_SharedWithMeEntry) {
294   google_apis::FileResource file_resource;
295   file_resource.set_shared(true);
296   file_resource.set_shared_with_me_date(GetTestTime());
297
298   ResourceEntry entry;
299   std::string parent_resource_id;
300   EXPECT_TRUE(ConvertFileResourceToResourceEntry(
301       file_resource, &entry, &parent_resource_id));
302   EXPECT_TRUE(entry.shared_with_me());
303   EXPECT_TRUE(entry.shared());
304 }
305
306 TEST(ResourceEntryConversionTest, ToPlatformFileInfo) {
307   ResourceEntry entry;
308   entry.mutable_file_info()->set_size(12345);
309   entry.mutable_file_info()->set_is_directory(true);
310   entry.mutable_file_info()->set_is_symbolic_link(true);
311   entry.mutable_file_info()->set_creation_time(999);
312   entry.mutable_file_info()->set_last_modified(123456789);
313   entry.mutable_file_info()->set_last_accessed(987654321);
314
315   base::File::Info file_info;
316   ConvertResourceEntryToFileInfo(entry, &file_info);
317   EXPECT_EQ(entry.file_info().size(), file_info.size);
318   EXPECT_EQ(entry.file_info().is_directory(), file_info.is_directory);
319   EXPECT_EQ(entry.file_info().is_symbolic_link(), file_info.is_symbolic_link);
320   EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().creation_time()),
321             file_info.creation_time);
322   EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().last_modified()),
323             file_info.last_modified);
324   EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().last_accessed()),
325             file_info.last_accessed);
326 }
327
328 TEST(ResourceEntryConversionTest,
329      ConvertFileResourceToResourceEntry_ImageMediaMetadata) {
330   google_apis::FileResource entry_all_fields;
331   google_apis::FileResource entry_zero_fields;
332   google_apis::FileResource entry_no_fields;
333
334   entry_all_fields.mutable_image_media_metadata()->set_width(640);
335   entry_all_fields.mutable_image_media_metadata()->set_height(480);
336   entry_all_fields.mutable_image_media_metadata()->set_rotation(90);
337
338   entry_zero_fields.mutable_image_media_metadata()->set_width(0);
339   entry_zero_fields.mutable_image_media_metadata()->set_height(0);
340   entry_zero_fields.mutable_image_media_metadata()->set_rotation(0);
341
342   {
343     ResourceEntry entry;
344     std::string parent_resource_id;
345     EXPECT_TRUE(ConvertFileResourceToResourceEntry(
346         entry_all_fields, &entry, &parent_resource_id));
347     EXPECT_EQ(640, entry.file_specific_info().image_width());
348     EXPECT_EQ(480, entry.file_specific_info().image_height());
349     EXPECT_EQ(90, entry.file_specific_info().image_rotation());
350   }
351   {
352     ResourceEntry entry;
353     std::string parent_resource_id;
354     EXPECT_TRUE(ConvertFileResourceToResourceEntry(
355         entry_zero_fields, &entry, &parent_resource_id));
356     EXPECT_TRUE(entry.file_specific_info().has_image_width());
357     EXPECT_TRUE(entry.file_specific_info().has_image_height());
358     EXPECT_TRUE(entry.file_specific_info().has_image_rotation());
359     EXPECT_EQ(0, entry.file_specific_info().image_width());
360     EXPECT_EQ(0, entry.file_specific_info().image_height());
361     EXPECT_EQ(0, entry.file_specific_info().image_rotation());
362   }
363   {
364     ResourceEntry entry;
365     std::string parent_resource_id;
366     EXPECT_TRUE(ConvertFileResourceToResourceEntry(
367         entry_no_fields, &entry, &parent_resource_id));
368     EXPECT_FALSE(entry.file_specific_info().has_image_width());
369     EXPECT_FALSE(entry.file_specific_info().has_image_height());
370     EXPECT_FALSE(entry.file_specific_info().has_image_rotation());
371   }
372 }
373
374 }  // namespace drive