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