15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_wapi_parser.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_file_value_serializer.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/test_util.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/time_util.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google_apis {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test document feed parsing.
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GDataWAPIParserTest, ResourceListJsonParser) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string error;
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  scoped_ptr<base::Value> document =
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      test_util::LoadJSONFile("gdata/basic_feed.json");
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(document.get());
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(base::Value::TYPE_DICTIONARY, document->GetType());
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourceList> feed(ResourceList::ExtractAndParse(*document));
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(feed.get());
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time update_time;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(util::GetTimeFromString("2011-12-14T01:03:21.151Z",
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   &update_time));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, feed->start_index());
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1000, feed->items_per_page());
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(update_time, feed->updated_time());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check authors.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1U, feed->authors().size());
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("tester", feed->authors()[0]->name());
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("tester@testing.com", feed->authors()[0]->email());
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check links.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(6U, feed->links().size());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* self_link = feed->GetLinkByType(Link::LINK_SELF);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(self_link);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://self_link/", self_link->href().spec());
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", self_link->mime_type());
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* resumable_link =
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      feed->GetLinkByType(Link::LINK_RESUMABLE_CREATE_MEDIA);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(resumable_link);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://resumable_create_media_link/",
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            resumable_link->href().spec());
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", resumable_link->mime_type());
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check entries.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(4U, feed->entries().size());
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check a folder entry.
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const ResourceEntry* folder_entry = feed->entries()[0];
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(folder_entry);
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(ResourceEntry::ENTRY_KIND_FOLDER, folder_entry->kind());
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("\"HhMOFgcNHSt7ImBr\"", folder_entry->etag());
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("folder:sub_sub_directory_folder_id", folder_entry->resource_id());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://1_folder_id", folder_entry->id());
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("Entry 1 Title", folder_entry->title());
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time entry1_update_time;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time entry1_publish_time;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(util::GetTimeFromString("2011-04-01T18:34:08.234Z",
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   &entry1_update_time));
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(util::GetTimeFromString("2010-11-07T05:03:54.719Z",
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   &entry1_publish_time));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(entry1_update_time, folder_entry->updated_time());
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(entry1_publish_time, folder_entry->published_time());
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1U, folder_entry->authors().size());
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("entry_tester", folder_entry->authors()[0]->name());
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("entry_tester@testing.com", folder_entry->authors()[0]->email());
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://1_folder_content_url/",
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            folder_entry->download_url().spec());
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml;type=feed",
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            folder_entry->content_mime_type());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, folder_entry->resource_links().size());
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const ResourceLink* feed_link = folder_entry->resource_links()[0];
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(feed_link);
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(ResourceLink::FEED_LINK_ACL, feed_link->type());
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* entry1_alternate_link =
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      folder_entry->GetLinkByType(Link::LINK_ALTERNATE);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(entry1_alternate_link);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://1_folder_alternate_link/",
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            entry1_alternate_link->href().spec());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("text/html", entry1_alternate_link->mime_type());
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* entry1_edit_link = folder_entry->GetLinkByType(Link::LINK_EDIT);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(entry1_edit_link);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://1_edit_link/", entry1_edit_link->href().spec());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", entry1_edit_link->mime_type());
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check a file entry.
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const ResourceEntry* file_entry = feed->entries()[1];
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(file_entry);
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, file_entry->kind());
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("filename.m4a", file_entry->filename());
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("sugg_file_name.m4a", file_entry->suggested_filename());
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", file_entry->file_md5());
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(892721, file_entry->file_size());
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* file_parent_link = file_entry->GetLinkByType(Link::LINK_PARENT);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(file_parent_link);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://file_link_parent/", file_parent_link->href().spec());
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", file_parent_link->mime_type());
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("Medical", file_parent_link->title());
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* file_open_with_link =
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_entry->GetLinkByType(Link::LINK_OPEN_WITH);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(file_open_with_link);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://xml_file_entry_open_with_link/",
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            file_open_with_link->href().spec());
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", file_open_with_link->mime_type());
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("the_app_id", file_open_with_link->app_id());
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(654321, file_entry->changestamp());
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* file_unknown_link = file_entry->GetLinkByType(Link::LINK_UNKNOWN);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(file_unknown_link);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("https://xml_file_fake_entry_open_with_link/",
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            file_unknown_link->href().spec());
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", file_unknown_link->mime_type());
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", file_unknown_link->app_id());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check a file entry.
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const ResourceEntry* resource_entry = feed->entries()[2];
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(resource_entry);
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Hosted documents are treated as unknown kind so that sync file system
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // doesn't assume them as neither folders nor normal files.
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(ResourceEntry::ENTRY_KIND_UNKNOWN, resource_entry->kind());
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check an external document entry.
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const ResourceEntry* app_entry = feed->entries()[3];
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(app_entry);
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Hosted documents are treated as unknown kind so that sync file system
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // doesn't assume them as neither folders nor normal files.
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(ResourceEntry::ENTRY_KIND_UNKNOWN, app_entry->kind());
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test document feed parsing.
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(GDataWAPIParserTest, ResourceEntryJsonParser) {
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error;
148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  scoped_ptr<base::Value> document =
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      test_util::LoadJSONFile("gdata/file_entry.json");
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(document.get());
151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(base::Value::TYPE_DICTIONARY, document->GetType());
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourceEntry> entry(ResourceEntry::ExtractAndParse(*document));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(entry.get());
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, entry->kind());
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("\"HhMOFgxXHit7ImBr\"", entry->etag());
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("file:2_file_resource_id", entry->resource_id());
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("2_file_id", entry->id());
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("File 1.mp3", entry->title());
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time entry1_update_time;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time entry1_publish_time;
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(util::GetTimeFromString("2011-12-14T00:40:47.330Z",
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      &entry1_update_time));
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(util::GetTimeFromString("2011-12-13T00:40:47.330Z",
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      &entry1_publish_time));
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(entry1_update_time, entry->updated_time());
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(entry1_publish_time, entry->published_time());
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1U, entry->authors().size());
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("tester", entry->authors()[0]->name());
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("tester@testing.com", entry->authors()[0]->email());
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("https://file_content_url/",
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            entry->download_url().spec());
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("audio/mpeg",
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            entry->content_mime_type());
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check feed links.
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, entry->resource_links().size());
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const ResourceLink* feed_link_1 = entry->resource_links()[0];
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(feed_link_1);
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(ResourceLink::FEED_LINK_REVISIONS, feed_link_1->type());
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check links.
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(8U, entry->links().size());
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* entry1_alternate_link =
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      entry->GetLinkByType(Link::LINK_ALTERNATE);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(entry1_alternate_link);
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("https://file_link_alternate/",
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            entry1_alternate_link->href().spec());
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("text/html", entry1_alternate_link->mime_type());
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* entry1_edit_link = entry->GetLinkByType(Link::LINK_EDIT_MEDIA);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(entry1_edit_link);
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("https://file_edit_media/",
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            entry1_edit_link->href().spec());
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("audio/mpeg", entry1_edit_link->mime_type());
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* entry1_self_link = entry->GetLinkByType(Link::LINK_SELF);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(entry1_self_link);
200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ("https://file1_link_self/file%3A2_file_resource_id",
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            entry1_self_link->href().spec());
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", entry1_self_link->mime_type());
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", entry1_self_link->app_id());
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* entry1_open_with_link =
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      entry->GetLinkByType(Link::LINK_OPEN_WITH);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(entry1_open_with_link);
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("https://entry1_open_with_link/",
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            entry1_open_with_link->href().spec());
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", entry1_open_with_link->mime_type());
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("the_app_id", entry1_open_with_link->app_id());
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Link* entry1_unknown_link = entry->GetLinkByType(Link::LINK_UNKNOWN);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(entry1_unknown_link);
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("https://entry1_fake_entry_open_with_link/",
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            entry1_unknown_link->href().spec());
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("application/atom+xml", entry1_unknown_link->mime_type());
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", entry1_unknown_link->app_id());
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check a file properties.
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, entry->kind());
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("File 1.mp3", entry->filename());
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("File 1.mp3", entry->suggested_filename());
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", entry->file_md5());
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(892721, entry->file_size());
2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // WAPI doesn't provide image metadata, but these fields are available
2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // since this class can wrap data received from Drive API (via a converter).
2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(-1, entry->image_width());
2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(-1, entry->image_height());
2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(-1, entry->image_rotation());
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace google_apis
235