| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/drive/resource_entry_conversion.h" |
| |
| #include "base/time/time.h" |
| #include "components/drive/drive.pb.h" |
| #include "components/drive/drive_api_util.h" |
| #include "google_apis/drive/drive_api_parser.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace drive { |
| |
| namespace { |
| |
| base::Time GetTestTime() { |
| // 2011-12-14-T00:40:47.330Z |
| base::Time::Exploded exploded; |
| exploded.year = 2011; |
| exploded.month = 12; |
| exploded.day_of_month = 14; |
| exploded.day_of_week = 2; // Tuesday |
| exploded.hour = 0; |
| exploded.minute = 40; |
| exploded.second = 47; |
| exploded.millisecond = 330; |
| return base::Time::FromUTCExploded(exploded); |
| } |
| |
| } // namespace |
| |
| TEST(ResourceEntryConversionTest, ConvertToResourceEntry_File) { |
| google_apis::FileResource file_resource; |
| file_resource.set_title("File 1.mp3"); |
| file_resource.set_file_id("resource_id"); |
| file_resource.set_created_date(GetTestTime()); |
| file_resource.set_modified_date( |
| GetTestTime() + base::TimeDelta::FromSeconds(10)); |
| file_resource.set_mime_type("audio/mpeg"); |
| file_resource.set_alternate_link(GURL("https://file_link_alternate")); |
| file_resource.set_file_size(892721); |
| file_resource.set_md5_checksum("3b4382ebefec6e743578c76bbd0575ce"); |
| |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertFileResourceToResourceEntry( |
| file_resource, &entry, &parent_resource_id)); |
| |
| EXPECT_EQ(file_resource.title(), entry.title()); |
| EXPECT_EQ(file_resource.title(), entry.base_name()); |
| EXPECT_EQ(file_resource.file_id(), entry.resource_id()); |
| EXPECT_EQ("", parent_resource_id); |
| |
| EXPECT_FALSE(entry.deleted()); |
| EXPECT_FALSE(entry.shared_with_me()); |
| EXPECT_FALSE(entry.shared()); |
| |
| EXPECT_EQ(file_resource.modified_date().ToInternalValue(), |
| entry.file_info().last_modified()); |
| // Last accessed value equal to 0 means that the file has never been viewed. |
| EXPECT_EQ(0, entry.file_info().last_accessed()); |
| EXPECT_EQ(file_resource.created_date().ToInternalValue(), |
| entry.file_info().creation_time()); |
| |
| EXPECT_EQ(file_resource.mime_type(), |
| entry.file_specific_info().content_mime_type()); |
| EXPECT_FALSE(entry.file_specific_info().is_hosted_document()); |
| EXPECT_EQ(file_resource.alternate_link().spec(), |
| entry.file_specific_info().alternate_url()); |
| |
| // Regular file specific fields. |
| EXPECT_EQ(file_resource.file_size(), entry.file_info().size()); |
| EXPECT_EQ(file_resource.md5_checksum(), entry.file_specific_info().md5()); |
| EXPECT_FALSE(entry.file_info().is_directory()); |
| } |
| |
| TEST(ResourceEntryConversionTest, |
| ConvertFileResourceToResourceEntry_HostedDocument) { |
| google_apis::FileResource file_resource; |
| file_resource.set_title("Document 1"); |
| file_resource.set_file_id("resource_id"); |
| file_resource.set_created_date(GetTestTime()); |
| file_resource.set_modified_date( |
| GetTestTime() + base::TimeDelta::FromSeconds(10)); |
| file_resource.set_last_viewed_by_me_date( |
| GetTestTime() + base::TimeDelta::FromSeconds(20)); |
| file_resource.set_mime_type(util::kGoogleDocumentMimeType); |
| file_resource.set_alternate_link(GURL("https://file_link_alternate")); |
| // Do not set file size to represent a hosted document. |
| |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertFileResourceToResourceEntry( |
| file_resource, &entry, &parent_resource_id)); |
| |
| EXPECT_EQ(file_resource.title(), entry.title()); |
| EXPECT_EQ(file_resource.title() + ".gdoc", |
| entry.base_name()); // The suffix added. |
| EXPECT_EQ(".gdoc", entry.file_specific_info().document_extension()); |
| EXPECT_EQ(file_resource.file_id(), entry.resource_id()); |
| EXPECT_EQ("", parent_resource_id); |
| |
| EXPECT_FALSE(entry.deleted()); |
| EXPECT_FALSE(entry.shared_with_me()); |
| EXPECT_FALSE(entry.shared()); |
| |
| EXPECT_EQ(file_resource.modified_date().ToInternalValue(), |
| entry.file_info().last_modified()); |
| EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(), |
| entry.file_info().last_accessed()); |
| EXPECT_EQ(file_resource.created_date().ToInternalValue(), |
| entry.file_info().creation_time()); |
| |
| EXPECT_EQ(file_resource.mime_type(), |
| entry.file_specific_info().content_mime_type()); |
| EXPECT_TRUE(entry.file_specific_info().is_hosted_document()); |
| EXPECT_EQ(file_resource.alternate_link().spec(), |
| entry.file_specific_info().alternate_url()); |
| |
| // The size should be 0 for a hosted document. |
| EXPECT_EQ(0, entry.file_info().size()); |
| EXPECT_FALSE(entry.file_info().is_directory()); |
| } |
| |
| TEST(ResourceEntryConversionTest, |
| ConvertFileResourceToResourceEntry_Directory) { |
| google_apis::FileResource file_resource; |
| file_resource.set_title("Folder"); |
| file_resource.set_file_id("resource_id"); |
| file_resource.set_created_date(GetTestTime()); |
| file_resource.set_modified_date( |
| GetTestTime() + base::TimeDelta::FromSeconds(10)); |
| file_resource.set_last_viewed_by_me_date( |
| GetTestTime() + base::TimeDelta::FromSeconds(20)); |
| file_resource.set_mime_type(util::kDriveFolderMimeType); |
| |
| google_apis::ParentReference parent; |
| parent.set_file_id("parent_resource_id"); |
| file_resource.mutable_parents()->push_back(parent); |
| |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertFileResourceToResourceEntry( |
| file_resource, &entry, &parent_resource_id)); |
| |
| EXPECT_EQ(file_resource.title(), entry.title()); |
| EXPECT_EQ(file_resource.title(), entry.base_name()); |
| EXPECT_EQ(file_resource.file_id(), entry.resource_id()); |
| // The parent resource ID should be obtained as this is a sub directory |
| // under a non-root directory. |
| EXPECT_EQ(parent.file_id(), parent_resource_id); |
| |
| EXPECT_FALSE(entry.deleted()); |
| EXPECT_FALSE(entry.shared_with_me()); |
| EXPECT_FALSE(entry.shared()); |
| |
| EXPECT_EQ(file_resource.modified_date().ToInternalValue(), |
| entry.file_info().last_modified()); |
| EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(), |
| entry.file_info().last_accessed()); |
| EXPECT_EQ(file_resource.created_date().ToInternalValue(), |
| entry.file_info().creation_time()); |
| |
| EXPECT_TRUE(entry.file_info().is_directory()); |
| } |
| |
| TEST(ResourceEntryConversionTest, |
| ConvertFileResourceToResourceEntry_DeletedHostedDocument) { |
| google_apis::FileResource file_resource; |
| file_resource.set_title("Document 1"); |
| file_resource.set_file_id("resource_id"); |
| file_resource.set_created_date(GetTestTime()); |
| file_resource.set_modified_date( |
| GetTestTime() + base::TimeDelta::FromSeconds(10)); |
| file_resource.set_last_viewed_by_me_date( |
| GetTestTime() + base::TimeDelta::FromSeconds(20)); |
| file_resource.set_mime_type(util::kGoogleDocumentMimeType); |
| file_resource.set_alternate_link(GURL("https://file_link_alternate")); |
| file_resource.mutable_labels()->set_trashed(true); |
| |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertFileResourceToResourceEntry( |
| file_resource, &entry, &parent_resource_id)); |
| |
| EXPECT_EQ(file_resource.title(), entry.title()); |
| EXPECT_EQ(file_resource.title() + ".gdoc", entry.base_name()); |
| EXPECT_EQ(file_resource.file_id(), entry.resource_id()); |
| EXPECT_EQ("", parent_resource_id); |
| |
| EXPECT_TRUE(entry.deleted()); // The document was deleted. |
| EXPECT_FALSE(entry.shared_with_me()); |
| EXPECT_FALSE(entry.shared()); |
| |
| EXPECT_EQ(file_resource.modified_date().ToInternalValue(), |
| entry.file_info().last_modified()); |
| EXPECT_EQ(file_resource.last_viewed_by_me_date().ToInternalValue(), |
| entry.file_info().last_accessed()); |
| EXPECT_EQ(file_resource.created_date().ToInternalValue(), |
| entry.file_info().creation_time()); |
| |
| EXPECT_EQ(file_resource.mime_type(), |
| entry.file_specific_info().content_mime_type()); |
| EXPECT_TRUE(entry.file_specific_info().is_hosted_document()); |
| EXPECT_EQ(file_resource.alternate_link().spec(), |
| entry.file_specific_info().alternate_url()); |
| |
| // The size should be 0 for a hosted document. |
| EXPECT_EQ(0, entry.file_info().size()); |
| } |
| |
| TEST(ResourceEntryConversionTest, ConvertChangeResourceToResourceEntry) { |
| google_apis::ChangeResource change_resource; |
| change_resource.set_file(make_scoped_ptr(new google_apis::FileResource)); |
| change_resource.set_file_id("resource_id"); |
| change_resource.set_modification_date(GetTestTime()); |
| |
| google_apis::FileResource* file_resource = change_resource.mutable_file(); |
| file_resource->set_title("File 1.mp3"); |
| file_resource->set_file_id("resource_id"); |
| // Set dummy file size to declare that this is a regular file. |
| file_resource->set_file_size(12345); |
| |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertChangeResourceToResourceEntry( |
| change_resource, &entry, &parent_resource_id)); |
| |
| EXPECT_EQ(change_resource.file_id(), entry.resource_id()); |
| EXPECT_EQ(change_resource.modification_date().ToInternalValue(), |
| entry.modification_date()); |
| |
| EXPECT_EQ(file_resource->title(), entry.title()); |
| EXPECT_EQ(file_resource->title(), entry.base_name()); |
| EXPECT_EQ("", parent_resource_id); |
| |
| EXPECT_FALSE(entry.deleted()); |
| } |
| |
| TEST(ResourceEntryConversionTest, |
| ConvertChangeResourceToResourceEntry_Trashed) { |
| google_apis::ChangeResource change_resource; |
| change_resource.set_file(make_scoped_ptr(new google_apis::FileResource)); |
| change_resource.set_file_id("resource_id"); |
| change_resource.set_modification_date(GetTestTime()); |
| |
| google_apis::FileResource* file_resource = change_resource.mutable_file(); |
| file_resource->set_title("File 1.mp3"); |
| file_resource->set_file_id("resource_id"); |
| // Set dummy file size to declare that this is a regular file. |
| file_resource->set_file_size(12345); |
| file_resource->mutable_labels()->set_trashed(true); |
| |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertChangeResourceToResourceEntry( |
| change_resource, &entry, &parent_resource_id)); |
| |
| EXPECT_EQ(change_resource.file_id(), entry.resource_id()); |
| EXPECT_EQ(change_resource.modification_date().ToInternalValue(), |
| entry.modification_date()); |
| |
| EXPECT_EQ(file_resource->title(), entry.title()); |
| EXPECT_EQ(file_resource->title(), entry.base_name()); |
| EXPECT_EQ("", parent_resource_id); |
| |
| EXPECT_TRUE(entry.deleted()); |
| } |
| |
| TEST(ResourceEntryConversionTest, |
| ConvertChangeResourceToResourceEntry_Deleted) { |
| google_apis::ChangeResource change_resource; |
| change_resource.set_deleted(true); |
| change_resource.set_file_id("resource_id"); |
| change_resource.set_modification_date(GetTestTime()); |
| |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertChangeResourceToResourceEntry( |
| change_resource, &entry, &parent_resource_id)); |
| |
| EXPECT_EQ(change_resource.file_id(), entry.resource_id()); |
| EXPECT_EQ("", parent_resource_id); |
| |
| EXPECT_TRUE(entry.deleted()); |
| |
| EXPECT_EQ(change_resource.modification_date().ToInternalValue(), |
| entry.modification_date()); |
| } |
| |
| TEST(ResourceEntryConversionTest, |
| ConvertFileResourceToResourceEntry_SharedWithMeEntry) { |
| google_apis::FileResource file_resource; |
| file_resource.set_shared(true); |
| file_resource.set_shared_with_me_date(GetTestTime()); |
| |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertFileResourceToResourceEntry( |
| file_resource, &entry, &parent_resource_id)); |
| EXPECT_TRUE(entry.shared_with_me()); |
| EXPECT_TRUE(entry.shared()); |
| } |
| |
| TEST(ResourceEntryConversionTest, ToPlatformFileInfo) { |
| ResourceEntry entry; |
| entry.mutable_file_info()->set_size(12345); |
| entry.mutable_file_info()->set_is_directory(true); |
| entry.mutable_file_info()->set_is_symbolic_link(true); |
| entry.mutable_file_info()->set_creation_time(999); |
| entry.mutable_file_info()->set_last_modified(123456789); |
| entry.mutable_file_info()->set_last_accessed(987654321); |
| |
| base::File::Info file_info; |
| ConvertResourceEntryToFileInfo(entry, &file_info); |
| EXPECT_EQ(entry.file_info().size(), file_info.size); |
| EXPECT_EQ(entry.file_info().is_directory(), file_info.is_directory); |
| EXPECT_EQ(entry.file_info().is_symbolic_link(), file_info.is_symbolic_link); |
| EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().creation_time()), |
| file_info.creation_time); |
| EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().last_modified()), |
| file_info.last_modified); |
| EXPECT_EQ(base::Time::FromInternalValue(entry.file_info().last_accessed()), |
| file_info.last_accessed); |
| } |
| |
| TEST(ResourceEntryConversionTest, |
| ConvertFileResourceToResourceEntry_ImageMediaMetadata) { |
| google_apis::FileResource entry_all_fields; |
| google_apis::FileResource entry_zero_fields; |
| google_apis::FileResource entry_no_fields; |
| |
| entry_all_fields.mutable_image_media_metadata()->set_width(640); |
| entry_all_fields.mutable_image_media_metadata()->set_height(480); |
| entry_all_fields.mutable_image_media_metadata()->set_rotation(90); |
| |
| entry_zero_fields.mutable_image_media_metadata()->set_width(0); |
| entry_zero_fields.mutable_image_media_metadata()->set_height(0); |
| entry_zero_fields.mutable_image_media_metadata()->set_rotation(0); |
| |
| { |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertFileResourceToResourceEntry( |
| entry_all_fields, &entry, &parent_resource_id)); |
| EXPECT_EQ(640, entry.file_specific_info().image_width()); |
| EXPECT_EQ(480, entry.file_specific_info().image_height()); |
| EXPECT_EQ(90, entry.file_specific_info().image_rotation()); |
| } |
| { |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertFileResourceToResourceEntry( |
| entry_zero_fields, &entry, &parent_resource_id)); |
| EXPECT_TRUE(entry.file_specific_info().has_image_width()); |
| EXPECT_TRUE(entry.file_specific_info().has_image_height()); |
| EXPECT_TRUE(entry.file_specific_info().has_image_rotation()); |
| EXPECT_EQ(0, entry.file_specific_info().image_width()); |
| EXPECT_EQ(0, entry.file_specific_info().image_height()); |
| EXPECT_EQ(0, entry.file_specific_info().image_rotation()); |
| } |
| { |
| ResourceEntry entry; |
| std::string parent_resource_id; |
| EXPECT_TRUE(ConvertFileResourceToResourceEntry( |
| entry_no_fields, &entry, &parent_resource_id)); |
| EXPECT_FALSE(entry.file_specific_info().has_image_width()); |
| EXPECT_FALSE(entry.file_specific_info().has_image_height()); |
| EXPECT_FALSE(entry.file_specific_info().has_image_rotation()); |
| } |
| } |
| |
| } // namespace drive |