1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/test/fake_server/bookmark_entity_builder.h"
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string>
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/guid.h"
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/time/time.h"
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/internal_api/public/base/model_type.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/internal_api/public/base/unique_position.h"
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/protocol/sync.pb.h"
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/syncable/syncable_util.h"
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/test/fake_server/bookmark_entity.h"
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/test/fake_server/fake_server_entity.h"
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/util/time.h"
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "url/gurl.h"
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using std::string;
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using syncer::syncable::GenerateSyncableBookmarkHash;
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// A version must be passed when creating a FakeServerEntity, but this value
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// is overrideen immediately when saving the entity in FakeServer.
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const int64 kUnusedVersion = 0L;
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Default time (creation and last modified) used when creating entities.
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const int64 kDefaultTime = 1234L;
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace fake_server {
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)BookmarkEntityBuilder::BookmarkEntityBuilder(
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const string& title,
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const GURL& url,
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const string& originator_cache_guid,
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const string& originator_client_item_id)
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    : EntityBuilder(syncer::BOOKMARKS, title),
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      url_(url),
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      originator_cache_guid_(originator_cache_guid),
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      originator_client_item_id_(originator_client_item_id) {
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)BookmarkEntityBuilder::~BookmarkEntityBuilder() {
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)scoped_ptr<FakeServerEntity> BookmarkEntityBuilder::Build() {
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (!url_.is_valid()) {
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return make_scoped_ptr<FakeServerEntity>(NULL);
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  sync_pb::EntitySpecifics entity_specifics;
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  sync_pb::BookmarkSpecifics* bookmark_specifics =
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      entity_specifics.mutable_bookmark();
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  bookmark_specifics->set_title(name_);
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  bookmark_specifics->set_url(url_.spec());
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  sync_pb::UniquePosition unique_position;
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // TODO(pvalenzuela): Allow caller customization of the position integer.
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  string suffix = GenerateSyncableBookmarkHash(originator_cache_guid_,
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                               originator_client_item_id_);
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  syncer::UniquePosition::FromInt64(0, suffix).ToProto(&unique_position);
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return make_scoped_ptr<FakeServerEntity>(
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      new BookmarkEntity(id_,
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         kUnusedVersion,
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         name_,
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         originator_cache_guid_,
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         originator_client_item_id_,
71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         unique_position,
72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         entity_specifics,
73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         // TODO(pvalenzuela): Support bookmark folders.
74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         false,
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         // TODO(pvalenzuela): Support caller specification of
76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         // the parent bookmark folder.
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         FakeServerEntity::CreateId(syncer::BOOKMARKS,
78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                                    "bookmark_bar"),
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         kDefaultTime,
80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         kDefaultTime));
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace fake_server
84