예제 #1
0
        public async Task ReturnsApprovedSongsOnlyWhenTheUserExists()
        {
            const string SomeId = "SomeId";

            var songs = new[]
            {
                new Song()
                {
                    IsApproved = false, UploaderId = SomeId
                },
                new Song()
                {
                    IsApproved = true, UploaderId = SomeId
                },
                new Song()
                {
                    IsApproved = true, UploaderId = SomeId
                },
                new Song()
                {
                    IsApproved = true, UploaderId = SomeId
                },
            }
            .AsQueryable()
            .BuildMock();

            var songRepositoryStub = new Mock <IEfRepository <Song> >();

            songRepositoryStub.Setup(x => x.All(It.IsAny <bool>()))
            .Returns(songs.Object);

            var userRepositoryStub = new Mock <IEfRepository <User> >();

            userRepositoryStub
            .Setup(x => x.GetByIdAsync(It.IsAny <string>()))
            .ReturnsAsync(new User()
            {
                Id = SomeId
            });

            GetApprovedSongsByUser query = new GetApprovedSongsByUser()
            {
                UserId = SomeId
            };

            // Arrange
            GetApprovedSongsByUserQueryService sut =
                new GetApprovedSongsByUserQueryService(
                    songRepository: songRepositoryStub.Object,
                    userRepository: userRepositoryStub.Object);

            // Act
            IEnumerable <Song> actualSongs = await sut.ExecuteAsync(query);

            // Assert
            Assert.That(actualSongs.All(s => s.IsApproved = true));
        }
예제 #2
0
        public async Task ReturnTheSongsOrderedByPublishDateDescendingWhenInvoked()
        {
            var songs = new[]
            {
                new Song()
                {
                    IsApproved = true, PublishedOn = new DateTime(2000, 1, 3)
                },
                new Song()
                {
                    IsApproved = true, PublishedOn = new DateTime(2000, 1, 2)
                },
                new Song()
                {
                    IsApproved = true, PublishedOn = new DateTime(2000, 1, 1)
                },
                new Song()
                {
                    IsApproved = true, PublishedOn = new DateTime(2000, 1, 21)
                }
            }
            .AsQueryable()
            .BuildMock();

            var songRepositoryStub = new Mock <IEfRepository <Song> >();

            songRepositoryStub
            .Setup(x => x.All(It.IsAny <bool>()))
            .Returns(songs.Object);

            var userRepositoryStub = new Mock <IEfRepository <User> >();

            userRepositoryStub
            .Setup(x => x.GetByIdAsync(It.IsAny <string>()))
            .ReturnsAsync(new User());

            GetApprovedSongsByUser query = new GetApprovedSongsByUser();

            // Arrange
            GetApprovedSongsByUserQueryService sut =
                new GetApprovedSongsByUserQueryService(
                    songRepository: songRepositoryStub.Object,
                    userRepository: userRepositoryStub.Object);

            // Act
            IEnumerable <Song> actualSongs = await sut.ExecuteAsync(query);

            // Assert
            Assert.That(
                actualSongs
                .Zip(actualSongs.Skip(1), (a, b) => new { a, b })
                .All(s => s.a.PublishedOn > s.b.PublishedOn));
        }
예제 #3
0
        public void SavePassedUserRepositoryWhenIsNotNull()
        {
            var songRepositoryStub = new Mock <IEfRepository <Song> >();
            var userRepositoryStub = new Mock <IEfRepository <User> >();

            // Arrange && Act
            GetApprovedSongsByUserQueryService sut =
                new GetApprovedSongsByUserQueryService(
                    songRepository: songRepositoryStub.Object,
                    userRepository: userRepositoryStub.Object);

            // Assert
            var actualUserRepository = sut.GetType()
                                       .GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
                                       .First(fi => fi.FieldType == typeof(IEfRepository <User>))
                                       .GetValue(sut);

            Assert.AreSame(userRepositoryStub.Object, actualUserRepository);
        }
예제 #4
0
        public void ThrowsNotFoundExceptionWhenUserDoesNotExists()
        {
            var songRepositoryStub = new Mock <IEfRepository <Song> >();
            var userRepositoryStub = new Mock <IEfRepository <User> >();

            userRepositoryStub
            .Setup(x => x.GetByIdAsync(It.IsAny <string>()))
            .ReturnsAsync((User)null);

            GetApprovedSongsByUser query = new GetApprovedSongsByUser();

            // Arrange
            GetApprovedSongsByUserQueryService sut =
                new GetApprovedSongsByUserQueryService(
                    songRepository: songRepositoryStub.Object,
                    userRepository: userRepositoryStub.Object);

            // Act && Assert
            Assert.ThrowsAsync <NotFoundException>(() => sut.ExecuteAsync(query));
        }