示例#1
0
        protected override Services CreateServices(IPeopleRepository sut, InMemoryPeopleRepository repository, ICacheSupervisor supervisor,
                                                   ServiceProvider provider)
        {
            var timeProvider = provider.GetRequiredService <ITimeProvider>();

            return(new Services(sut, repository, supervisor, timeProvider));
        }
        public void ReadAllSortedByGender()
        {
            var people = new List <Person>()
            {
                new Person("a", "e", "f", DateTimeOffset.Parse("04-02-1987 00:00"), "g"),
                new Person("c", "d", "f", DateTimeOffset.Parse("03-02-1987 00:00"), "f"),
                new Person("b", "c", "m", DateTimeOffset.Parse("02-02-1987 00:00"), "e"),
                new Person("d", "b", "m", DateTimeOffset.Parse("01-02-1987 00:00"), "d")
            };

            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);

            // This will insert it in the wrong order: descending last names in stead of ascending.
            foreach (var item in people.OrderByDescending(x => x.FirstName))
            {
                repo.CreatePerson(item);
            }

            List <Person> orderedPeople = repo.ReadPeople(OrderOption.gender).ToList();

            for (int i = 0; i < 4; i++)
            {
                Assert.AreEqual(people[i].FavoriteColor, orderedPeople[i].FavoriteColor);
                Assert.AreEqual(people[i].FirstName, orderedPeople[i].FirstName);
                Assert.AreEqual(people[i].LastName, orderedPeople[i].LastName);
                Assert.AreEqual(people[i].DateOfBirth, orderedPeople[i].DateOfBirth);
                Assert.AreEqual(people[i].Gender, orderedPeople[i].Gender);
            }
        }
示例#3
0
 public Services(IPeopleRepository sut, InMemoryPeopleRepository repository, ICacheSupervisor cacheSupervisor,
                 ITimeProvider timeProvider)
 {
     Sut             = sut ?? throw new ArgumentNullException(nameof(sut));
     Repository      = repository ?? throw new ArgumentNullException(nameof(repository));
     CacheSupervisor = cacheSupervisor ?? throw new ArgumentNullException(nameof(cacheSupervisor));
     TimeProvider    = timeProvider ?? throw new ArgumentNullException(nameof(timeProvider));
 }
        public void ReadFailsOnNonExistantId()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);
            var person             = new Person("first", "last", "male", System.DateTimeOffset.Now, "blue");

            Person created = repo.CreatePerson(person);

            Assert.ThrowsException <KeyNotFoundException>(() => repo.ReadPerson(created.PersonId + 1));
        }
        public void CreateFailsOnNonZeroPersonId()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);
            var person             = new Person("first", "last", "male", System.DateTimeOffset.Now, "blue");
            var newPerson          = new Person(5, person);

            repo.CreatePerson(person);
            Assert.ThrowsException <ArgumentOutOfRangeException>(() => repo.CreatePerson(newPerson));
        }
        public void ReadSucceedsOnExistantId()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);
            var person             = new Person("first", "last", "male", System.DateTimeOffset.Now, "blue");

            Person created = repo.CreatePerson(person);
            Person read    = repo.ReadPerson(created.PersonId);

            Assert.AreSame(created, read);
        }
        public void CreateDoesNotFailOnSamePerson()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);
            var person             = new Person("first", "last", "male", System.DateTimeOffset.Now, "blue");

            repo.CreatePerson(person);
            repo.CreatePerson(person);

            Assert.AreEqual(2, repo.ReadPeople().Count());
        }
        public void DeleteSucceedsOnExistantId()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);
            var person             = new Person("first", "last", "male", System.DateTimeOffset.Now, "blue");

            Person created = repo.CreatePerson(person);

            repo.DeletePerson(created.PersonId);

            Assert.IsFalse(repo.ReadPeople().Any());
        }
        public void UpdateFailsOnNonExistantId()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);
            var person             = new Person("first", "last", "male", System.DateTimeOffset.Now, "blue");

            Person created = repo.CreatePerson(person);

            created.FavoriteColor = "green";

            Person falseUpdate = new Person(created.PersonId + 1, created);

            Assert.ThrowsException <KeyNotFoundException>(() => repo.UpdatePerson(falseUpdate));
        }
示例#10
0
        public static void ConfigureMyServices(IServiceCollection services)
        {
            services.AddMvc().AddJsonOptions(options =>
            {
                options.SerializerSettings.Formatting = Formatting.Indented;
            });
            services.AddLogging();

            // We need to take this approach, otherwise the console app and the webapi endpoint somehow end up with two different instances,
            // even though we indicated it should add a Singleton, and thus they should both be using the same bloody thing.
            // This may have to do with going across App Domain boundaries / threads, the way we are launching things above.
            ILogger <InMemoryPeopleRepository> logger = services.BuildServiceProvider().GetRequiredService <ILogger <InMemoryPeopleRepository> >();
            var peopleRepo = new InMemoryPeopleRepository(logger);

            services.AddSingleton(typeof(IPeopleRepository), peopleRepo);
            Provider = services.BuildServiceProvider();
        }
        public void UpdateSucceeds()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);
            var person             = new Person("first", "last", "male", System.DateTimeOffset.Now, "blue");

            Person created = repo.CreatePerson(person);

            created.FavoriteColor = "green";
            Person updated = repo.UpdatePerson(created);

            Assert.AreNotEqual(person, updated);
            Assert.AreNotEqual(person.FavoriteColor, updated.FavoriteColor);
            Assert.AreEqual(person.FirstName, updated.FirstName);
            Assert.AreEqual(person.LastName, updated.LastName);
            Assert.AreEqual(person.DateOfBirth, updated.DateOfBirth);
            Assert.AreEqual(person.Gender, updated.Gender);
            Assert.AreEqual(person.PersonId, updated.PersonId);
        }
示例#12
0
 protected override Services CreateServices(IPeopleRepository sut, InMemoryPeopleRepository repository, ICacheSupervisor supervisor,
                                            ServiceProvider provider)
 {
     return(new Services(sut, repository, supervisor));
 }
示例#13
0
 public void GetAllThrowsExceptionForNullRepo()
 {
     InMemoryPeopleRepository nullRepo = null;
     var results = nullRepo.GetAll();
 }
示例#14
0
        public void TryFindAgainstNullCollectionThrowsException()
        {
            InMemoryPeopleRepository nullRepo = null;

            nullRepo.TryFind("Some Person", out List <Person> matches);
        }
        public void ReadPeopleThrowsOnBadSort()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);

            Assert.ThrowsException <ArgumentOutOfRangeException>(() => repo.ReadPeople((OrderOption)4));
        }
        public void BaseConstructorHasEmptyList()
        {
            IPeopleRepository repo = new InMemoryPeopleRepository(logger.Object);

            Assert.IsFalse(repo.ReadPeople().Any());
        }