Exemple #1
0
        public void GetNotSecretById_ReturnsCorrectAlbums()
        {
            // Arrange
            var context = this.ServiceProvider.GetRequiredService <WmipDbContext>();
            var album1  = new Album {
                Id = 1, Name = "Abm"
            };
            var album2 = new Album {
                Id = 2, Name = "Abm", ApprovalStatus = ApprovalStatus.Approved, ReleaseStage = ReleaseStage.Announced
            };
            var album3 = new Album {
                Id = 3, Name = "Abm"
            };

            context.Albums.AddRange(album1, album2, album3);
            context.SaveChanges();
            var albumsService = new AlbumsService(context);

            // Act
            var nonExisting = albumsService.GetNotSecretById(1);
            var exising     = albumsService.GetNotSecretById(2);

            //Assert
            Assert.Null(nonExisting);
            Assert.NotNull(exising);
        }
Exemple #2
0
        public void IsUserCreator_ReturnsCorrectResults()
        {
            // Arrange
            var context = this.ServiceProvider.GetRequiredService <WmipDbContext>();
            var album1  = new Album {
                Id = 1, Name = "Abm1", Artist = new User {
                    Id = "1", UserName = "******"
                }
            };
            var album2 = new Album {
                Id = 2, Name = "Abm2", Artist = new User {
                    Id = "2", UserName = "******"
                }
            };

            context.Albums.AddRange(album1, album2);
            context.SaveChanges();
            var albumsService = new AlbumsService(context);

            // Act
            var usernameResultTrue  = albumsService.IsUserCreatorByName("ivan", 1);
            var usernameResultFalse = albumsService.IsUserCreatorByName("ivan", 2);
            var idResultTrue        = albumsService.IsUserCreatorById("1", 1);
            var idResultFalse       = albumsService.IsUserCreatorById("1", 2);

            //Assert
            Assert.True(usernameResultTrue);
            Assert.False(usernameResultFalse);
            Assert.True(idResultTrue);
            Assert.False(idResultFalse);
        }
Exemple #3
0
        public void Delete_ShouldCallSaveChangesIfOperationIsAuthorizedAndAlbumIsFound()
        {
            // arrange

            string username = "******";
            var    album    = new Album()
            {
                Id      = 2,
                Name    = "customAlbum0",
                Private = false,
                Owner   = new User()
                {
                    UserName = username
                }
            };

            var data = new FakeGalleryData();

            data.Albums.Add(album);
            var service = new AlbumsService(data);

            // act

            service.DeleteAlbumById(2, username);

            // assert

            var actual = data.SaveChangesCallCount;

            Assert.AreEqual(1, actual);
        }
Exemple #4
0
        public void Create_IncreasesCountAndAddsItem()
        {
            // Arrange
            var context       = this.ServiceProvider.GetRequiredService <WmipDbContext>();
            var albumsService = new AlbumsService(context);
            var creationInfo  = new CreateAlbumDto()
            {
                AlbumCoverLink  = "newlink",
                Genre           = "newgenre",
                Name            = "newname",
                ReleaseDate     = DateTime.Now.AddDays(1),
                ReleaseStage    = ReleaseStage.Announced,
                SpotifyLink     = "newSLink",
                SelectedSongIds = new int[] { 1, 2, 3, 4, 5, 6, 7 }
            };

            // Act
            albumsService.Create(creationInfo);

            //Assert
            Assert.Single(context.Albums);
            Assert.Equal(creationInfo.Name, context.Albums.First().Name);
            Assert.Equal(creationInfo.AlbumCoverLink, context.Albums.First().AlbumCoverLink);
            Assert.Equal(creationInfo.Genre, context.Albums.First().Genre);
            Assert.Equal(creationInfo.ReleaseDate, context.Albums.First().ReleaseDate);
            Assert.Equal(creationInfo.ReleaseStage, context.Albums.First().ReleaseStage);
            Assert.Equal(creationInfo.SpotifyLink, context.Albums.First().SpotifyLink);
            Assert.Equal(creationInfo.SelectedSongIds, context.Albums.First().AlbumsSongs.Select(s => s.SongId));
        }
Exemple #5
0
        public void GetAlbumsByUser_ShouldGetOnlyPublicAlbumsOfUserIfOtherAuthenitcatedUser()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryUsersData(data, 5);
            this.PopulateFakeGalleryAlbumsData(data, 10);

            string username = "******";
            var    album    = new Album()
            {
                Name    = "customAlbum0",
                Private = false
            };

            var service = new AlbumsService(data);

            service.Add(album, username);

            // act
            var actual = service.GetAlbumsByUser(username, "user1").Count();

            // assert
            Assert.AreEqual(1, actual);
        }
Exemple #6
0
        public void Delete_ShouldReturnTheIdOfTheDeletedAlbum()
        {
            // arrange

            string username = "******";
            var    album    = new Album()
            {
                Id      = 2,
                Name    = "customAlbum0",
                Private = false,
                Owner   = new User()
                {
                    UserName = username
                }
            };

            var data = new FakeGalleryData();

            data.Albums.Add(album);
            var service = new AlbumsService(data);

            // act

            var actual = service.DeleteAlbumById(2, username);

            // assert

            Assert.AreEqual(2, actual);
        }
Exemple #7
0
        public void Delete_ShouldDeleteAlbumOfAuthorizedUser()
        {
            // arrange

            string username = "******";
            var    album    = new Album()
            {
                Id      = 2,
                Name    = "customAlbum0",
                Private = false,
                Owner   = new User()
                {
                    UserName = username
                }
            };

            var data = new FakeGalleryData();

            data.Albums.Add(album);
            var service = new AlbumsService(data);

            // act

            service.DeleteAlbumById(2, username);

            // assert

            var actual = data.Albums.All().Count();

            Assert.AreEqual(0, actual);
        }
Exemple #8
0
        public async Task CreateAsyncWithInCorrectDataShouldThrowArgumentException()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var dbContext        = new ApplicationDbContext(options);
            var cloudinary       = new Mock <ICloudinaryService>();
            var albumsRepository = new EfDeletableEntityRepository <Album>(dbContext);
            var albumsService    = new AlbumsService(albumsRepository, cloudinary.Object);
            var photo            = new Mock <IFormFile>();

            var releaseDate = DateTime.ParseExact("2012-05-22", "yyyy-MM-dd", CultureInfo.InvariantCulture);
            await albumsRepository.AddAsync(new Album
            {
                Name        = "Carolus Rex",
                CoverUrl    = "https://res.cloudinary.com/nikolacgeorgiev/image/upload/v1587375890/albums_photos/Carolus_Rex_ftub8r.jpg",
                ReleaseDate = releaseDate,
                GroupId     = 4,
            });

            await albumsRepository.SaveChangesAsync();

            await Assert.ThrowsAsync <ArgumentException>(async() =>
            {
                await albumsService.CreateAsync("Carolus Rex", photo.Object, releaseDate, 4);
            });
        }
Exemple #9
0
        public void Delete_ShouldReturnMinusOneIfAlbumWasNotFoundOrAuthorizedUserIsNotOwner()
        {
            // arrange

            string username = "******";
            var    album    = new Album()
            {
                Id      = 2,
                Name    = "customAlbum0",
                Private = false,
                Owner   = new User()
                {
                    UserName = username
                }
            };

            var data = new FakeGalleryData();

            data.Albums.Add(album);
            var service = new AlbumsService(data);

            // act

            var actual = service.DeleteAlbumById(3, username);

            // assert

            Assert.AreEqual(0, actual);
        }
        public void GetAlbumPhotos_ShouldReturnAllPhotosWhenUserIsOwner()
        {
            var user         = UserCreator.Create("test");
            var publicPhoto  = PhotoCreator.Create(user, false, false);
            var privatePhoto = PhotoCreator.Create(user, true, false);
            var album        = AlbumCreator.Create(false, user);

            var listAlbums = new List <Album>()
            {
                album
            };
            var listPhotoAlbums = new List <PhotoAlbum>()
            {
                PhotoAlbumCreator.Create(publicPhoto, album),
                PhotoAlbumCreator.Create(privatePhoto, album),
            };

            var photoAlbumsRepo = EfRepositoryMock.Get <PhotoAlbum>(listPhotoAlbums);
            var albumsRepo      = DeletableEntityRepositoryMock.Get <Album>(listAlbums);

            var service = new AlbumsService(albumsRepo.Object, photoAlbumsRepo.Object);
            var photos  = service.GetAlbumPhotos <PhotoAlbumViewModel>(album.Id, user.Id);

            Assert.Equal(2, photos.Count);
        }
        public void Update_ShouldUpdateAlbumSucessfully()
        {
            var user  = UserCreator.Create("test");
            var album = AlbumCreator.Create(false, user);
            var list  = new List <Album>()
            {
                album,
            };

            var editAlbumModel = new EditAlbumInputModel
            {
                Id          = album.Id,
                OwnerId     = user.Id,
                Description = "Updated",
                IsPrivate   = false,
                Name        = "Updated",
            };

            var photoAlbumsRepo = EfRepositoryMock.Get <PhotoAlbum>(new List <PhotoAlbum>());
            var albumsRepo      = DeletableEntityRepositoryMock.Get <Album>(list);

            var services = new AlbumsService(albumsRepo.Object, photoAlbumsRepo.Object);

            services.UpdateAsync(
                album.Id,
                user.Id,
                editAlbumModel).Wait();

            var item = list.First();

            Assert.Equal(editAlbumModel.Description, item.Description);
            Assert.Equal(editAlbumModel.Name, item.Name);
        }
Exemple #12
0
        public async Task Should_Return_Merged_Albums_And_Photos_When_Calling_GetAlbumsWithPhotosByUserId()
        {
            var albumsApiService = new Mock <IAlbumsApiClient>();

            albumsApiService.Setup(x => x.GetAlbumsByUserId(1)).ReturnsAsync(new List <AlbumConsume>()
            {
                new AlbumConsume {
                    Id = 1, Title = "Test", UserId = 1
                },
            });
            albumsApiService.Setup(x => x.GetPhotosByAlbumIds(new List <int> {
                1
            })).ReturnsAsync(new List <PhotoConsume>()
            {
                new PhotoConsume()
                {
                    Id = 1, AlbumId = 1, Title = "Test Photo", ThumbnailUrl = "something", Url = "something"
                },
            });

            var albumsService = new AlbumsService(albumsApiService.Object, _mapper);

            var albums = await albumsService.GetAlbumsWithPhotosByUserId(1);

            Assert.Single(albums);
            Assert.Collection(albums, album => Assert.Single(album.Photos));
        }
Exemple #13
0
 public AlbumsController(
     AlbumsService albumPreviewService,
     PhotosService photosService
     )
 {
     this._albumPreviewService = albumPreviewService;
     this._photosService       = photosService;
 }
Exemple #14
0
        public void Add_ShouldThrowIfAlbumIsNull()
        {
            // arrange
            var    data     = new FakeGalleryData();
            var    service  = new AlbumsService(data);
            string username = "******";

            // act
            service.Add(null, username);
        }
Exemple #15
0
        public void Add_ShouldThrow_WhenNoCreatorSpecified()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryUsersData(data, 5);
            var service = new AlbumsService(data);
            var album   = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, null);
        }
 public UtilityController(
     UsersRepository usersRepository,
     AlbumsRepository albumsRepository,
     PhotosRepository photosRepository,
     AlbumsService albumPreviewService
     )
 {
     this._usersRepository     = usersRepository;
     this._albumsRepository    = albumsRepository;
     this._photosRepository    = photosRepository;
     this._albumPreviewService = albumPreviewService;
 }
Exemple #17
0
        public void Add_ShouldThrowIfUserWithSpecifiedUsernameIsNotFound()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryUsersData(data, 5);
            var    service  = new AlbumsService(data);
            string username = "******";
            var    album    = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
        }
Exemple #18
0
        public void GetAll_ShouldReturnZeroAlbumsCount_WhenNoAlbumsInData()
        {
            // arrange
            var    data     = new FakeGalleryData();
            var    service  = new AlbumsService(data);
            string username = null;

            // act
            var actual = service.GetAll(username).Count();

            // assert
            Assert.AreEqual(0, actual);
        }
        public void Update_ShouldNotUpdateAlbumSuccessfully()
        {
            var list  = new List <Album>();
            var model = new EditAlbumInputModel {
                Id = "1", OwnerId = "2", Description = "test", IsPrivate = false, Name = "test"
            };
            var photoAlbumsRepo = EfRepositoryMock.Get <PhotoAlbum>(new List <PhotoAlbum>());
            var albumsRepo      = DeletableEntityRepositoryMock.Get <Album>(list);

            var       services = new AlbumsService(albumsRepo.Object, photoAlbumsRepo.Object);
            Exception ex       = Assert.Throws <AggregateException>(() => services.UpdateAsync("1", "2", model).Wait());

            Assert.Contains("Album does not exist!", ex.Message);
        }
Exemple #20
0
        public void GetAll_ShouldReturnNonPrivateAndPrivateAlbumsOfTheAuthorizedUser_WhenUserIsAuthorized()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryAlbumsData(data, 30);
            var    service  = new AlbumsService(data);
            string username = "******";

            // act
            var actual = service.GetAll(username).Count();

            // assert
            Assert.AreEqual(16, actual);
        }
Exemple #21
0
        public void GetById_ShouldNotReturnAlbumIfAlbumIsPrivate_WhenUserIsNotAuthorized()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryAlbumsData(data, 5);
            var    service  = new AlbumsService(data);
            string username = null;

            // act
            var actual = service.GetById(2, username).Count();

            // assert
            Assert.AreEqual(0, actual);
        }
Exemple #22
0
        public void Edit_ChangesProperties()
        {
            // Arrange
            var context = this.ServiceProvider.GetRequiredService <WmipDbContext>();
            var album   = new Album
            {
                Id             = 1,
                AlbumCoverLink = "first",
                Genre          = "first",
                Name           = "first",
                ReleaseDate    = DateTime.Now.AddDays(-1),
                ReleaseStage   = ReleaseStage.Secret,
                SpotifyLink    = "first",
                AlbumsSongs    = new List <AlbumSong>()
                {
                    new AlbumSong {
                        SongId = 1
                    }
                }
            };

            context.Albums.Add(album);
            context.SaveChanges();
            var albumsService = new AlbumsService(context);
            var editInfo      = new EditAlbumDto()
            {
                Id              = 1,
                AlbumCoverLink  = "newlink",
                Genre           = "newgenre",
                Name            = "newname",
                ReleaseDate     = DateTime.Now.AddDays(1),
                ReleaseStage    = ReleaseStage.Announced,
                SpotifyLink     = "newSLink",
                SelectedSongIds = new int[] { 1, 2, 3, 4, 5, 6, 7 }
            };

            // Act
            albumsService.Edit(editInfo);

            //Assert
            Assert.Equal(editInfo.Name, context.Albums.First().Name);
            Assert.Equal(editInfo.AlbumCoverLink, context.Albums.First().AlbumCoverLink);
            Assert.Equal(editInfo.Genre, context.Albums.First().Genre);
            Assert.Equal(editInfo.ReleaseDate, context.Albums.First().ReleaseDate);
            Assert.Equal(editInfo.ReleaseStage, context.Albums.First().ReleaseStage);
            Assert.Equal(editInfo.SpotifyLink, context.Albums.First().SpotifyLink);
            Assert.Equal(editInfo.SelectedSongIds, context.Albums.First().AlbumsSongs.Select(s => s.SongId));
        }
        public void Add_ShouldAddAlbumIfAlbumAndUsernameAreValid()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            var service = new AlbumsService(data);
            string username = "******";
            var album = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
            var actual = service.GetAll(username).Count();

            // assert
            Assert.AreEqual(1, actual);
        }
        public void Add_ShouldCallDataSaveChanges()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            var service = new AlbumsService(data);
            string username = "******";
            var album = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
            var actual = data.SaveChangesCallCount;

            // assert
            Assert.AreEqual(1, actual);
        }
        public void Add_ShouldAddAlbumWithCorrectUserWhenUsernameIsValid()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            var service = new AlbumsService(data);
            string username = "******";
            var album = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
            var actual = service.GetAll(username).First().Owner.UserName;

            // assert
            Assert.AreEqual(username, actual);
        }
        public void GetById_ShouldReturnNullDataWhenAlbumDoesNotExists()
        {
            var user  = UserCreator.Create("test");
            var album = AlbumCreator.Create(false, user);

            var listAlbums      = new List <Album>();
            var listPhotoAlbums = new List <PhotoAlbum>();

            var photoAlbumsRepo = EfRepositoryMock.Get <PhotoAlbum>(listPhotoAlbums);
            var albumsRepo      = DeletableEntityRepositoryMock.Get <Album>(listAlbums);

            var service       = new AlbumsService(albumsRepo.Object, photoAlbumsRepo.Object);
            var returnedAlbum = service.GetById <AlbumViewModel>(album.Id, user.Id);

            Assert.Null(returnedAlbum);
        }
        public void Create_ShouldCreateAlbumSuccessfully()
        {
            var list  = new List <Album>();
            var model = new CreateAlbumInputModel()
            {
                Description = "TestDesc", IsPrivate = false, Name = "testName"
            };
            var photoAlbumsRepo = EfRepositoryMock.Get <PhotoAlbum>(new List <PhotoAlbum>());
            var albumsRepo      = DeletableEntityRepositoryMock.Get <Album>(list);

            var services = new AlbumsService(albumsRepo.Object, photoAlbumsRepo.Object);

            services.CreateAsync(model, "testUser").Wait();

            Assert.Single(list);
        }
Exemple #28
0
        public void Add_ShouldReturnTheAddedAlbumId()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryUsersData(data, 5);
            var    service  = new AlbumsService(data);
            string username = "******";
            var    album    = this.GetAlbum("myalbum", false);

            // act
            var actual = service.Add(album, username);

            // assert
            Assert.AreEqual(1, actual);
        }
Exemple #29
0
        public void Add_ShouldCallDataSaveChanges()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryUsersData(data, 5);
            var    service  = new AlbumsService(data);
            string username = "******";
            var    album    = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
            var actual = data.SaveChangesCallCount;

            // assert
            Assert.AreEqual(1, actual);
        }
Exemple #30
0
        public void Add_ShouldAddAlbumIfAlbumAndUsernameAreValid()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryUsersData(data, 5);
            var    service  = new AlbumsService(data);
            string username = "******";
            var    album    = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
            var actual = service.GetAll(username).Count();

            // assert
            Assert.AreEqual(1, actual);
        }
Exemple #31
0
        public async Task CreateAsyncWithCorrectDataShouldReturnCorrectResult()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;
            var dbContext        = new ApplicationDbContext(options);
            var cloudinary       = new Mock <ICloudinaryService>();
            var albumsRepository = new EfDeletableEntityRepository <Album>(dbContext);
            var albumsService    = new AlbumsService(albumsRepository, cloudinary.Object);
            var photo            = new Mock <IFormFile>();

            var releaseDate = DateTime.ParseExact("2012-05-22", "yyyy-MM-dd", CultureInfo.InvariantCulture);
            var actual      = await albumsService.CreateAsync("Carolus Rex", photo.Object, releaseDate, 4);

            var expected = 1;

            Assert.Equal(expected, actual);
        }
        public void GetAlbumPhotos_ShouldThrowErrorWhenAlbumDoesNotExists()
        {
            var user  = UserCreator.Create("test");
            var album = AlbumCreator.Create(false, user);

            var listAlbums      = new List <Album>();
            var listPhotoAlbums = new List <PhotoAlbum>();

            var photoAlbumsRepo = EfRepositoryMock.Get <PhotoAlbum>(listPhotoAlbums);
            var albumsRepo      = DeletableEntityRepositoryMock.Get <Album>(listAlbums);

            var service = new AlbumsService(albumsRepo.Object, photoAlbumsRepo.Object);

            Exception ex = Assert.Throws <Exception>(() => service.GetAlbumPhotos <PhotoAlbumViewModel>(album.Id, user.Id));

            Assert.Contains("Album does not exist!", ex.Message);
        }
Exemple #33
0
        public void Add_ShouldAddAlbumWithCorrectUserWhenUsernameIsValid()
        {
            // arrange
            var data = new FakeGalleryData();

            this.PopulateFakeGalleryUsersData(data, 5);
            var    service  = new AlbumsService(data);
            string username = "******";
            var    album    = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
            var actual = service.GetAll(username).First().Owner.UserName;

            // assert
            Assert.AreEqual(username, actual);
        }
        public void Add_ShouldAddAlbumWithCorrectDate()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            var service = new AlbumsService(data);
            string username = "******";
            var album = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
            var addedAlbum = service.GetAll(username).First();
            var addedAlbumDate = addedAlbum.CreatedOn.Date;
            var addedAlbumHour = addedAlbum.CreatedOn.Hour;

            // assert
            Assert.AreEqual(DateTime.Now.Date, addedAlbumDate);
        }
        public void GetById_ShouldReturnCorrectAlbumIfNotPrivate_WhenUserIsNotAuthorized()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryAlbumsData(data, 5);
            var service = new AlbumsService(data);
            string username = null;

            // act
            var actual = service.GetById(1, username).Count();

            // assert
            Assert.AreEqual(1, actual);
        }
        public void Add_ShouldThrow_WhenNoCreatorSpecified()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            var service = new AlbumsService(data);
            var album = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, null);
        }
        public void GetAll_ShouldReturnOnlyNonPrivateAlbums_WhenUserIsNotAuthorized()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryAlbumsData(data, 30);
            var service = new AlbumsService(data);
            string username = null;

            // act
            var actual = service.GetAll(username).Count();

            // assert
            Assert.AreEqual(15, actual);
        }
        public void GetAlbumsByUser_ShouldGetOnlyPublicAlbumsOfUserIfOtherAuthenitcatedUser()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            this.PopulateFakeGalleryAlbumsData(data, 10);

            string username = "******";
            var album = new Album()
            {
                Name = "customAlbum0",
                Private = false
            };

            var service = new AlbumsService(data);
            service.Add(album, username);

            // act
            var actual = service.GetAlbumsByUser(username, "user1").Count();

            // assert
            Assert.AreEqual(1, actual);
        }
        public void Delete_ShouldCallSaveChangesIfOperationIsAuthorizedAndAlbumIsFound()
        {
            // arrange

            string username = "******";
            var album = new Album()
            {
                Id = 2,
                Name = "customAlbum0",
                Private = false,
                Owner = new User() { UserName = username }
            };

            var data = new FakeGalleryData();
            data.Albums.Add(album);
            var service = new AlbumsService(data);

            // act

            service.DeleteAlbumById(2, username);

            // assert

            var actual = data.SaveChangesCallCount;
            Assert.AreEqual(1, actual);
        }
        public void Delete_ShouldDeleteAlbumOfAuthorizedUser()
        {
            // arrange

            string username = "******";
            var album = new Album()
            {
                Id = 2,
                Name = "customAlbum0",
                Private = false,
                Owner = new User() { UserName = username}
            };

            var data = new FakeGalleryData();
            data.Albums.Add(album);
            var service = new AlbumsService(data);

            // act

            service.DeleteAlbumById(2, username);

            // assert

            var actual = data.Albums.All().Count();
            Assert.AreEqual(0, actual);
        }
        public void Delete_ShouldReturnMinusOneIfAlbumWasNotFoundOrAuthorizedUserIsNotOwner()
        {
            // arrange

            string username = "******";
            var album = new Album()
            {
                Id = 2,
                Name = "customAlbum0",
                Private = false,
                Owner = new User() { UserName = username }
            };

            var data = new FakeGalleryData();
            data.Albums.Add(album);
            var service = new AlbumsService(data);

            // act

            var actual = service.DeleteAlbumById(3, username);

            // assert

            Assert.AreEqual(0, actual);
        }
        public void Delete_ShouldReturnTheIdOfTheDeletedAlbum()
        {
            // arrange

            string username = "******";
            var album = new Album()
            {
                Id = 2,
                Name = "customAlbum0",
                Private = false,
                Owner = new User() { UserName = username }
            };

            var data = new FakeGalleryData();
            data.Albums.Add(album);
            var service = new AlbumsService(data);

            // act

            var actual = service.DeleteAlbumById(2, username);

            // assert

            Assert.AreEqual(2, actual);
        }
        public void GetById_ShouldReturnAlbumIfAlbumIsPrivate_AndOwnerIsAuthorized()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryAlbumsData(data, 5);
            var service = new AlbumsService(data);
            string username = "******";

            // act
            var actual = service.GetById(2, username).Count();

            // assert
            Assert.AreEqual(1, actual);
        }
        public void Add_ShouldThrowIfAlbumIsNull()
        {
            // arrange
            var data = new FakeGalleryData();
            var service = new AlbumsService(data);
            string username = "******";

            // act
            service.Add(null, username);
        }
        public void Add_ShouldThrowIfUserWithSpecifiedUsernameIsNotFound()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            var service = new AlbumsService(data);
            string username = "******";
            var album = this.GetAlbum("myalbum", false);

            // act
            service.Add(album, username);
        }
        public void GetAlbumsByUser_ShouldGetAllAlbumsOfUserIfSameIsAuthenticated()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            this.PopulateFakeGalleryAlbumsData(data, 10);

            string username = "******";
            var album = new Album()
            {
                Name = "customAlbum0",
            };
            var service = new AlbumsService(data);
            service.Add(album, username);

            // act
            var actual = service.GetAlbumsByUser(username, username).Count();

            // assert
            Assert.AreEqual(2, actual);
        }
        public void Add_ShouldReturnTheAddedAlbumId()
        {
            // arrange
            var data = new FakeGalleryData();
            this.PopulateFakeGalleryUsersData(data, 5);
            var service = new AlbumsService(data);
            string username = "******";
            var album = this.GetAlbum("myalbum", false);

            // act
            var actual = service.Add(album, username);

            // assert
            Assert.AreEqual(1, actual);
        }
        public void GetAll_ShouldReturnZeroAlbumsCount_WhenNoAlbumsInData()
        {
            // arrange
            var data = new FakeGalleryData();
            var service = new AlbumsService(data);
            string username = null;

            // act
            var actual = service.GetAll(username).Count();

            // assert
            Assert.AreEqual(0, actual);
        }