blob: c9dfdb50a6fcfb23b35851f1ecfcdb1d483082af [file] [log] [blame]
// Copyright 2013 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 <vector>
#include "base/json/json_writer.h"
#include "base/values.h"
#include "sync/test/accounts_client/test_accounts_client.cc"
#include "sync/test/accounts_client/test_accounts_client.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
using std::string;
using std::vector;
using testing::_;
using testing::DoAll;
using testing::Return;
using testing::SetArgPointee;
namespace {
static const string kServer = "https://test-account-service";
static const string kUsername = "foobar@baz.com";
static const string kAccountSpace = "test_account_space";
static const string kSessionId = "1234-ABCD";
static const string kExpirationTime = "12:00";
} // namespace
static AccountSession CreateValidAccountSession() {
AccountSession session;
session.username = kUsername;
session.account_space = kAccountSpace;
session.session_id = kSessionId;
session.expiration_time = kExpirationTime;
return session;
}
class NoNetworkTestAccountsClient : public TestAccountsClient {
public:
NoNetworkTestAccountsClient(const string& server,
const string& account_space,
vector<string> usernames)
: TestAccountsClient(server, account_space, usernames) {}
MOCK_METHOD2(SendRequest, bool(const GURL&, string*));
};
TEST(TestAccountsClientTest, ClaimAccountError) {
vector<string> usernames;
NoNetworkTestAccountsClient client(kServer, kAccountSpace, usernames);
EXPECT_CALL(client, SendRequest(_, _))
.WillOnce(Return(false));
AccountSession session;
EXPECT_FALSE(client.ClaimAccount(&session));
}
TEST(TestAccountsClientTest, ClaimAccountSuccess) {
vector<string> usernames;
usernames.push_back("foo0@gmail.com");
usernames.push_back("foo1@gmail.com");
usernames.push_back("foo2@gmail.com");
NoNetworkTestAccountsClient client(kServer, kAccountSpace, usernames);
base::DictionaryValue success_dict;
success_dict.Set("username", new base::StringValue(kUsername));
success_dict.Set("account_space", new base::StringValue(kAccountSpace));
success_dict.Set("session_id", new base::StringValue(kSessionId));
success_dict.Set("expiration_time", new base::StringValue(kExpirationTime));
string success_response;
base::JSONWriter::Write(&success_dict, &success_response);
EXPECT_CALL(client, SendRequest(_, _))
.WillOnce(DoAll(SetArgPointee<1>(success_response), Return(true)));
AccountSession session;
EXPECT_TRUE(client.ClaimAccount(&session));
EXPECT_EQ(kUsername, session.username);
EXPECT_EQ(kAccountSpace, session.account_space);
EXPECT_EQ(kSessionId, session.session_id);
EXPECT_EQ(kExpirationTime, session.expiration_time);
}
TEST(TestAccountsClientTest, ReleaseAccountEmptySession) {
vector<string> usernames;
NoNetworkTestAccountsClient client(kServer, kAccountSpace, usernames);
AccountSession session;
// No expectation for SendRequest is made because no network call should be
// performed in this scenario.
client.ReleaseAccount(session);
}
TEST(TestAccountsClientTest, ReleaseAccountSuccess) {
vector<string> usernames;
NoNetworkTestAccountsClient client(kServer, kAccountSpace, usernames);
EXPECT_CALL(client, SendRequest(_, _))
.WillOnce(Return(true));
AccountSession session = CreateValidAccountSession();
client.ReleaseAccount(session);
}