Example #1
0
        public async Task ShouldReturnTrue_WhenUserFavoritedAudio()
        {
            // Assign
            var target = await RunAsDefaultUserAsync();

            target.TryGetUserId(out var targetId);

            var audio = new AudioFaker(targetId).Generate();

            InsertIntoDatabase(audio);

            var observer = await RunAsUserAsync();

            observer.TryGetUserId(out var observerId);

            var favoriteAudio = new FavoriteAudio
            {
                AudioId = audio.Id,
                UserId  = observerId,
            };

            InsertIntoDatabase(favoriteAudio);

            // Act
            var isFavorited = await SendAsync(new CheckIfAudioFavoritedQuery(audio.Id, observerId));

            // Assert
            isFavorited.Should().BeTrue();
        }
        public async Task SuccessfullyGetAudioFeed()
        {
            var user1 = await RunAsUserAsync();

            user1.TryGetUserId(out var user1Id);
            var oneAudios = new AudioFaker(user1Id).Generate(5);

            InsertRangeIntoDatabase(oneAudios);

            var user2 = await RunAsUserAsync();

            user2.TryGetUserId(out var user2Id);
            var twoAudios = new AudioFaker(user2Id).Generate(5);

            InsertRangeIntoDatabase(twoAudios);

            var user = await RunAsDefaultUserAsync();

            user.TryGetUserId(out var userId);
            InsertIntoDatabase(new FollowedUser
            {
                ObserverId = userId,
                TargetId   = user1Id
            }, new FollowedUser
            {
                ObserverId = userId,
                TargetId   = user2Id
            });

            var result = await SendAsync(new GetAudioFeedQuery(userId));

            result.Items.Should().NotBeEmpty();
            result.Items.Count.Should().Be(10);
        }
        public async Task AddFavoriteTest()
        {
            // Assign
            var target = await RunAsDefaultUserAsync();

            target.TryGetUserId(out var targetId);

            var observer = await RunAsUserAsync();

            observer.TryGetUserId(out var observerId);

            var audio = new AudioFaker(targetId).Generate();

            InsertIntoDatabase(audio);

            // Act
            await SendAsync(new SetFavoriteAudioCommand(audio.Id, observerId, true));

            var refetchAudio = ExecuteDbContext(database =>
            {
                return(database.Audios
                       .AsNoTracking()
                       .Include(u => u.FavoriteAudios)
                       .SingleOrDefault(a => a.Id == audio.Id));
            });

            // Assert
            refetchAudio.Should().NotBeNull();
            refetchAudio !.FavoriteAudios.Should().NotBeEmpty();
            refetchAudio.FavoriteAudios.Should().Contain(x => x.UserId == observerId);
        }
        public async Task ShouldUpdateSuccessfully()
        {
            // Assign
            var owner = await RunAsUserAsync("kopacetic");

            owner.TryGetUserId(out var ownerId);

            var audio = new AudioFaker(ownerId).Generate();

            InsertIntoDatabase(audio);

            // Act
            var command = new UpdateAudioCommandFaker(audio.Id).Generate();

            await SendAsync(command);

            var created = ExecuteDbContext(database =>
            {
                return(database.Audios
                       .Include(a => a.User)
                       .SingleOrDefault(a => a.Id == audio.Id));
            });

            // Assert
            created.Should().NotBeNull();
            created !.Title.Should().Be(command.Title);
            created.Description.Should().Be(command.Description);
            created.Tags.Count.Should().Be(command.Tags !.Count);
        }
Example #5
0
        public async Task ShouldCacheSuccessfully()
        {
            // Assign
            var user = await RunAsDefaultUserAsync();

            user.TryGetUserId(out var userId);

            var audio = new AudioFaker(userId).Generate();

            InsertIntoDatabase(audio);
            var result = await SendAsync(new GetAudioQuery(audio.Id));

            // Act
            var cacheResult = await GetCache <AudioDto>(CacheKeys.Audio.GetAudio(audio.Id));

            // Assert
            cacheResult.Should().NotBeNull();
            cacheResult.Should().BeOfType <AudioDto>();
            cacheResult !.Title.Should().Be(result !.Title);
            cacheResult.Description.Should().Be(result !.Description);
            cacheResult.Created.Should().Be(result !.Created);
            cacheResult.Duration.Should().Be(result !.Duration);
            cacheResult.Picture.Should().BeNullOrEmpty();
            cacheResult.Tags.Count.Should().Be(result !.Tags.Count);
            cacheResult.Size.Should().Be(result !.Size);
            result.LastModified.Should().BeNull();
            result.User.Should().NotBeNull();
            result.User.Should().BeOfType <UserDto>();
            result.User.Id.Should().Be(userId);
        }
Example #6
0
        public async Task ShouldNotRemoveAudio_WhenNotTheAuthor()
        {
            var owner = await RunAsDefaultUserAsync();

            owner.TryGetUserId(out var ownerId);
            var audio = new AudioFaker(ownerId).Generate();

            InsertIntoDatabase(audio);
            await RunAsUserAsync();

            var result = await SendAsync(new RemoveAudioCommand(audio.Id));

            result.IsSuccess.Should().BeFalse();
            result.ErrorCode.Should().Be(ResultError.Forbidden);
        }
Example #7
0
        public async Task ShouldNotGetAudio_WhenAudioIdIsInvalid()
        {
            // Assign
            var owner = await RunAsDefaultUserAsync();

            owner.TryGetUserId(out var ownerId);
            var audio = new AudioFaker(ownerId).Generate();

            InsertIntoDatabase(audio);

            // Act
            var result = await SendAsync(new GetAudioQuery(0));

            // Assert
            result.Should().BeNull();
        }
Example #8
0
        public async Task ShouldRemoveAudio()
        {
            var owner = await RunAsDefaultUserAsync();

            owner.TryGetUserId(out var ownerId);
            var audio = new AudioFaker(ownerId).Generate();

            InsertIntoDatabase(audio);

            var command = new RemoveAudioCommand(audio.Id);
            var result  = await SendAsync(command);

            var created = ExecuteDbContext(dbContext =>
                                           dbContext.Audios.SingleOrDefault(x => x.Id == audio.Id));

            result.Should().NotBeNull();
            result.IsSuccess.Should().Be(true);
            created.Should().BeNull();
        }
        public async Task ShouldReturnFavoriteAudioSuccessfully()
        {
            // Assign
            var target = await RunAsDefaultUserAsync();

            target.TryGetUserId(out var targetId);

            var audioFaker = new AudioFaker(targetId);
            var audios     = audioFaker
                             .Generate(3);

            InsertIntoDatabase(audios.ToArray());

            var observer = await RunAsUserAsync();

            observer.TryGetUserId(out var observerId);
            observer.TryGetUserName(out var observerUsername);

            var favoriteAudios = new List <FavoriteAudio>();

            foreach (var audio in audios)
            {
                var favoriteAudio = new FavoriteAudio
                {
                    AudioId = audio.Id,
                    UserId  = observerId,
                };

                favoriteAudios.Add(favoriteAudio);
            }
            InsertIntoDatabase(favoriteAudios.ToArray());

            // Act
            var response = await SendAsync(new GetUserFavoriteAudiosQuery
            {
                Username = observerUsername
            });

            // Assert
            response.Should().NotBeNull();
            response.Items.Count.Should().Be(3);
        }
Example #10
0
        public async Task SearchForAudiosSuccessfully()
        {
            var faker = new Faker();

            // create tags
            var tags = Enumerable.Range(1, 5)
                       .Select <int, string>(_ => faker.Random.String2(5, 10))
                       .ToList();


            // create posts
            var user = await RunAsDefaultUserAsync();

            user.TryGetUserId(out var userId);

            var audioFaker = new AudioFaker(userId)
                             .FinishWith((f, a) =>
            {
                a.Tags = new List <string> {
                    tags[0], tags[1]
                };
            });

            var audio = audioFaker.Generate();

            InsertIntoDatabase(audio);

            // Act
            var request = new SearchAudiosQuery
            {
                Q    = audio.Title,
                Tags = $"{tags[0]},{tags[1]}"
            };

            var results = await SendAsync(request);

            //Assert
            results.Should().NotBeNull();
            results.Items.Count.Should().BeGreaterThan(0);
            results.Items.Should().Contain(x => x.Id == audio.Id);
        }
        public async Task ShouldInvalidateCacheSuccessfully()
        {
            // Assign
            var user = await RunAsDefaultUserAsync();

            user.TryGetUserId(out var userId);
            var audio = new AudioFaker(userId).Generate();

            InsertIntoDatabase(audio);
            await SendAsync(new GetAudioQuery(audio.Id));

            var command = new UpdateAudioCommandFaker(audio.Id).Generate();

            await SendAsync(command);

            // Act
            var cacheResult = await GetCache <AudioDto>(CacheKeys.Audio.GetAudio(audio.Id));

            // Assert
            cacheResult.Should().BeNull();
        }
        public async Task ShouldNotUpdate_WhenUserCannotModify()
        {
            // Assign
            var owner = await RunAsUserAsync("kopacetic");

            owner.TryGetUserId(out var ownerId);

            var audio = new AudioFaker(ownerId).Generate();

            InsertIntoDatabase(audio);

            // Act
            await RunAsDefaultUserAsync();

            var command = new UpdateAudioCommandFaker(audio.Id).Generate();

            var result = await SendAsync(command);

            // Assert
            result.Should().NotBeNull();
            result.IsSuccess.Should().Be(false);
            result.ErrorCode.Should().Be(ResultError.Forbidden);
        }