change_list_processor_unittest.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/change_list_processor.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/message_loop.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/values.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/drive.pb.h" 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/google_apis/drive_api_parser.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/google_apis/gdata_wapi_parser.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/google_apis/test_util.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace drive { 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace internal { 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace { 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Parses a json file at |test_data_path| relative to Chrome test directory into 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// a drive::internal::ChangeList structure. 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ChangeList* ParseChangeList(const std::string& test_data_path) { 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return new ChangeList( 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *google_apis::ResourceList::ExtractAndParse( 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *google_apis::test_util::LoadJSONFile( 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) test_data_path))); 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(ChangeListProcessorTest, DeltaFileAddedInNewDirectory) { 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedVector<ChangeList> changes; 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) changes.push_back(ParseChangeList( 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "chromeos/gdata/delta_file_added_in_new_directory.json")); 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ChangeListProcessor::ResourceEntryMap entry_map; 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ChangeListProcessor::FeedToEntryMap(changes.Pass(), &entry_map, NULL); 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kRootId("fake_root"); 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kNewFolderId("folder:new_folder_resource_id"); 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kNewFileId("document:file_added_in_new_dir_id"); 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(2U, entry_map.size()); 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map.count(kNewFolderId)); 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map.count(kNewFileId)); 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(kRootId, entry_map[kNewFolderId].parent_resource_id()); 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(kNewFolderId, entry_map[kNewFileId].parent_resource_id()); 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map[kNewFolderId].file_info().is_directory()); 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(entry_map[kNewFileId].file_info().is_directory()); 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("New Directory", entry_map[kNewFolderId].title()); 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("File in new dir", entry_map[kNewFileId].title()); 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(ChangeListProcessorTest, DeltaDirMovedFromRootToDirectory) { 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedVector<ChangeList> changes; 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) changes.push_back(ParseChangeList( 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "chromeos/gdata/delta_dir_moved_from_root_to_directory.json")); 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ChangeListProcessor::ResourceEntryMap entry_map; 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ChangeListProcessor::FeedToEntryMap(changes.Pass(), &entry_map, NULL); 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kMovedId("folder:1_folder_resource_id"); 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kDestId("folder:sub_dir_folder_2_self_link"); 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(2U, entry_map.size()); 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map.count(kMovedId)); 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map.count(kDestId)); 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(kDestId, entry_map[kMovedId].parent_resource_id()); 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(ChangeListProcessorTest, DeltaFileMovedFromDirectoryToRoot) { 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedVector<ChangeList> changes; 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) changes.push_back(ParseChangeList( 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "chromeos/gdata/delta_file_moved_from_directory_to_root.json")); 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ChangeListProcessor::ResourceEntryMap entry_map; 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ChangeListProcessor::FeedToEntryMap(changes.Pass(), &entry_map, NULL); 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kRootId("fake_root"); 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kMovedId("file:subdirectory_file_1_id"); 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kSrcId("folder:1_folder_resource_id"); 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(2U, entry_map.size()); 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map.count(kMovedId)); 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map.count(kSrcId)); 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(kRootId, entry_map[kMovedId].parent_resource_id()); 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(ChangeListProcessorTest, DeltaFileRenamedInDirectory) { 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedVector<ChangeList> changes; 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) changes.push_back(ParseChangeList( 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "chromeos/gdata/delta_file_renamed_in_directory.json")); 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ChangeListProcessor::ResourceEntryMap entry_map; 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ChangeListProcessor::FeedToEntryMap(changes.Pass(), &entry_map, NULL); 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kRootId("fake_root"); 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kRenamedId("file:subdirectory_file_1_id"); 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string kParentId("folder:1_folder_resource_id"); 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(2U, entry_map.size()); 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map.count(kRenamedId)); 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(entry_map.count(kParentId)); 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(kParentId, entry_map[kRenamedId].parent_resource_id()); 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("New SubDirectory File 1.txt", entry_map[kRenamedId].title()); 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// TODO(kinaba): write test for ApplyFeeds crbug.com/147728. 10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace internal 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace drive 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 113