bf756dea |
#include <functional>
#include <memory>
#include <string>
#include <vector>
|
66796de1 |
#include "installer.h"
|
bf756dea |
#include "user.h"
#include "token.h"
#include "test_util.h"
class mock_tokens : public tokens_ifc {
public:
mutable std::string captured_token;
void save (const user &user, const std::string &token) const override {
captured_token = token;
}
};
class fake_unistd : public unistd_ifc {
private:
std::string user_name_;
public:
fake_unistd(const std::string &user_name) : user_name_(user_name) {}
const char *getlogin() const override {
return user_name_.c_str();
}
};
|
66796de1 |
|
55530c94 |
class fail_unistd : public unistd_ifc {
public:
const char *getlogin() const override {
return nullptr;
}
};
|
bf756dea |
class fake_directory : public directory_ifc {
private:
std::string expected_user_name_;
public:
fake_directory(const std::string &expected_user_name) : expected_user_name_(expected_user_name) {
}
std::vector<user> find_user (const std::string &user_name) const override {
std::vector<user> rval;
if (user_name == expected_user_name_) {
rval.push_back(user());
}
return rval;
}
};
int installs_token() {
|
66796de1 |
//given
|
bf756dea |
std::string user_name("user");
std::string token("token");
auto test_tokens = std::make_shared<mock_tokens>();
tokens tokens{test_tokens};
unistd unistd(std::make_shared<fake_unistd>(user_name));
directory directory(std::make_shared<fake_directory>(user_name));
installer_ifc::generator generator = [&] { return token; };
installer installer = installer::create (tokens, unistd, directory, generator);
|
66796de1 |
//when
|
10081f1a |
std::string result = installer.install_token();
|
66796de1 |
//then
|
bf756dea |
check(test_tokens->captured_token == token, "installed wrong token");
|
10081f1a |
check(result == token, "installer returned wrong token");
|
bf756dea |
succeed();
|
66796de1 |
}
|
55530c94 |
int unistd_does_not_find_user_name() {
//given
std::string user_name("user");
std::string token("token");
auto test_tokens = std::make_shared<mock_tokens>();
tokens tokens{test_tokens};
unistd unistd(std::make_shared<fail_unistd>());
directory directory(std::make_shared<fake_directory>(user_name));
installer_ifc::generator generator = [&] { return token; };
installer installer = installer::create (tokens, unistd, directory, generator);
//when
installer.install_token();
|
bf756dea |
|
55530c94 |
//then
check(test_tokens->captured_token == "", "should not have installed a token");
succeed();
}
|
bf756dea |
|
43a993d5 |
int directory_finds_no_user_info() {
std::string user_name("user");
std::string token("token");
auto test_tokens = std::make_shared<mock_tokens>();
tokens tokens{test_tokens};
unistd unistd(std::make_shared<fake_unistd>(user_name));
directory directory(std::make_shared<fake_directory>("not the user"));
installer_ifc::generator generator = [&] { return token; };
installer installer = installer::create (tokens, unistd, directory, generator);
//when
installer.install_token();
//then
check(test_tokens->captured_token == "", "installed wrong token");
succeed();
}
|
bf756dea |
int run_tests() {
test(installs_token);
|
55530c94 |
test(unistd_does_not_find_user_name);
|
43a993d5 |
test(directory_finds_no_user_info);
|
bf756dea |
succeed();
}
int main(int argc, char *argv[]) {
return !run_tests();
}
|
66796de1 |
|