Upstream version 8.37.180.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
91   ResourceEntry entry;
92   std::string parent_resource_id;
93   EXPECT_TRUE(ConvertFileResourceToResourceEntry(
94       file_resource, &entry, &parent_resource_id));
95
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);
102
103   EXPECT_FALSE(entry.deleted());
104   EXPECT_FALSE(entry.shared_with_me());
105   EXPECT_FALSE(entry.shared());
106
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());
113
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());
119
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());
123 }
124
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);
136
137   google_apis::ParentReference parent;
138   parent.set_file_id("parent_resource_id");
139   file_resource.mutable_parents()->push_back(parent);
140
141   ResourceEntry entry;
142   std::string parent_resource_id;
143   EXPECT_TRUE(ConvertFileResourceToResourceEntry(
144       file_resource, &entry, &parent_resource_id));
145
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);
152
153   EXPECT_FALSE(entry.deleted());
154   EXPECT_FALSE(entry.shared_with_me());
155   EXPECT_FALSE(entry.shared());
156
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());
163
164   EXPECT_TRUE(entry.file_info().is_directory());
165 }
166
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);
180
181   ResourceEntry entry;
182   std::string parent_resource_id;
183   EXPECT_TRUE(ConvertFileResourceToResourceEntry(
184       file_resource, &entry, &parent_resource_id));
185
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);
190
191   EXPECT_TRUE(entry.deleted());  // The document was deleted.
192   EXPECT_FALSE(entry.shared_with_me());
193   EXPECT_FALSE(entry.shared());
194
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());
201
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());
207
208   // The size should be 0 for a hosted document.
209   EXPECT_EQ(0, entry.file_info().size());
210 }
211
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());
217
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");
221
222   ResourceEntry entry;
223   std::string parent_resource_id;
224   EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
225       change_resource, &entry, &parent_resource_id));
226
227   EXPECT_EQ(change_resource.file_id(), entry.resource_id());
228   EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
229             entry.modification_date());
230
231   EXPECT_EQ(file_resource->title(), entry.title());
232   EXPECT_EQ(file_resource->title(), entry.base_name());
233   EXPECT_EQ("", parent_resource_id);
234
235   EXPECT_FALSE(entry.deleted());
236 }
237
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());
244
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);
249
250   ResourceEntry entry;
251   std::string parent_resource_id;
252   EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
253       change_resource, &entry, &parent_resource_id));
254
255   EXPECT_EQ(change_resource.file_id(), entry.resource_id());
256   EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
257             entry.modification_date());
258
259   EXPECT_EQ(file_resource->title(), entry.title());
260   EXPECT_EQ(file_resource->title(), entry.base_name());
261   EXPECT_EQ("", parent_resource_id);
262
263   EXPECT_TRUE(entry.deleted());
264 }
265
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());
272
273   ResourceEntry entry;
274   std::string parent_resource_id;
275   EXPECT_TRUE(ConvertChangeResourceToResourceEntry(
276       change_resource, &entry, &parent_resource_id));
277
278   EXPECT_EQ(change_resource.file_id(), entry.resource_id());
279   EXPECT_EQ("", parent_resource_id);
280
281   EXPECT_TRUE(entry.deleted());
282
283   EXPECT_EQ(change_resource.modification_date().ToInternalValue(),
284             entry.modification_date());
285 }
286
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());
292
293   ResourceEntry entry;
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());
299 }
300
301 TEST(ResourceEntryConversionTest, ToPlatformFileInfo) {
302   ResourceEntry entry;
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);
309
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);
321 }
322
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;
328
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);
332
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);
336
337   {
338     ResourceEntry entry;
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());
345   }
346   {
347     ResourceEntry entry;
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());
357   }
358   {
359     ResourceEntry entry;
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());
366   }
367 }
368
369 }  // namespace drive