53 lines
1.4 KiB
D
53 lines
1.4 KiB
D
module test.calendarwebapp.testauthenticator;
|
|
|
|
import calendarwebapp.authenticator;
|
|
|
|
import poodinis;
|
|
|
|
import unit_threaded.mock;
|
|
import unit_threaded.should;
|
|
|
|
import vibe.data.bson : Bson;
|
|
|
|
interface Collection
|
|
{
|
|
Bson findOne(string[string] query) @safe;
|
|
}
|
|
|
|
class CollectionInjector : ValueInjector!Collection
|
|
{
|
|
private:
|
|
Collection[string] collections;
|
|
|
|
public:
|
|
void add(string key, Collection collection)
|
|
{
|
|
collections[key] = collection;
|
|
}
|
|
|
|
override Collection get(string key) @safe
|
|
{
|
|
return collections[key];
|
|
}
|
|
}
|
|
|
|
@("Test MongoDBAuthenticator")
|
|
@system unittest
|
|
{
|
|
auto collection = mock!Collection;
|
|
auto container = new shared DependencyContainer;
|
|
container.register!(ValueInjector!Collection, CollectionInjector);
|
|
container.resolve!CollectionInjector.add("users", collection);
|
|
container.register!(Authenticator, MongoDBAuthenticator!(Collection))(
|
|
RegistrationOption.doNotAddConcreteTypeRegistration);
|
|
|
|
collection.returnValue!"findOne"(Bson(true), Bson(null));
|
|
collection.expect!"findOne"(["username" : "", "password" : ""]);
|
|
collection.expect!"findOne"(["username" : "foo", "password" : "bar"]);
|
|
|
|
auto authenticator = container.resolve!(Authenticator);
|
|
authenticator.checkUser("", "").shouldBeTrue;
|
|
authenticator.checkUser("foo", "bar").shouldBeFalse;
|
|
|
|
collection.verify;
|
|
}
|