public void AddOrUpdateSet_BricksetUserSetExists_UpdatesAndReturnsModel() { var set = ModelsSetup.GetSetUnderTest(); var bricksetUser = ModelsSetup.GetBricksetUserUnderTest(); set = InsertData(set); InsertData(bricksetUser); var bricksetUserSetUnderTest = new BricksetUserSet { Set = set, Wanted = true }; _bricksetUserRepository.AddOrUpdateSet(bricksetUser.BricksetUsername, bricksetUserSetUnderTest); bricksetUserSetUnderTest.Wanted = false; bricksetUserSetUnderTest.Owned = true; bricksetUserSetUnderTest.QuantityOwned = 2; var bricksetUserSet = _bricksetUserRepository.AddOrUpdateSet(bricksetUser.BricksetUsername, bricksetUserSetUnderTest); Check.That(bricksetUserSet).HasFieldsWithSameValues(bricksetUserSetUnderTest); Check.That(bricksetUserSet.Wanted).IsFalse(); }
public void GetOwnedSets_BricksetUserExists_ReturnsListOfOwnedSets() { var wantedSet = ModelsSetup.GetSetUnderTest(); var ownedSet = ModelsSetup.GetSecondSetUnderTest(); var bricksetUser = ModelsSetup.GetBricksetUserUnderTest(); wantedSet = InsertData(wantedSet); ownedSet = InsertData(ownedSet); InsertData(bricksetUser); var bricksetUserSetWanted = new BricksetUserSet { Set = wantedSet, Wanted = true }; var bricksetUserSetOwned = new BricksetUserSet { Set = ownedSet, Owned = true }; _bricksetUserRepository.AddOrUpdateSet(bricksetUser.BricksetUsername, bricksetUserSetWanted); _bricksetUserRepository.AddOrUpdateSet(bricksetUser.BricksetUsername, bricksetUserSetOwned); var bricksetUserSetList = _bricksetUserRepository.GetOwnedSets(bricksetUser.BricksetUsername).ToList(); Check.That(bricksetUserSetList).CountIs(1); Check.That(bricksetUserSetList.Select(bricksetUserSet => bricksetUserSet.Set.SetId)).Contains(bricksetUserSetOwned.Set.SetId); }
public BricksetUserSet AddOrUpdateSet(string username, BricksetUserSet bricksetUserSet) { if (string.IsNullOrWhiteSpace(username) || bricksetUserSet is null || bricksetUserSet.Set is null || bricksetUserSet.Set.SetId == 0) { return(null); } using var repository = _repositoryService.GetRepository(); if (repository.FirstOrDefault <Set>(set => set.SetId == bricksetUserSet.Set.SetId) is null) { return(null); } var bricksetUser = Get(username); if (bricksetUser is null) { return(null); } var existingBricksetUserSet = bricksetUser.Sets.FirstOrDefault(set => set.Set.SetId == bricksetUserSet.Set.SetId); if (existingBricksetUserSet != null) { if (existingBricksetUserSet.Owned == bricksetUserSet.Owned && existingBricksetUserSet.Wanted == bricksetUserSet.Wanted && existingBricksetUserSet.QuantityOwned == bricksetUserSet.QuantityOwned) { return(existingBricksetUserSet); } bricksetUser.Sets.Remove(existingBricksetUserSet); } bricksetUserSet.LastChangeTimestamp ??= DateTimeOffset.Now; bricksetUser.Sets.Add(bricksetUserSet); repository.Update(bricksetUser); return(bricksetUserSet); }
public void GetSet_BricksetUserHasSetId_ReturnsModel() { var set = ModelsSetup.GetSetUnderTest(); var bricksetUser = ModelsSetup.GetBricksetUserUnderTest(); set = InsertData(set); InsertData(bricksetUser); var bricksetUserSetUnderTest = new BricksetUserSet { Set = set, Wanted = true }; _bricksetUserRepository.AddOrUpdateSet(bricksetUser.BricksetUsername, bricksetUserSetUnderTest); var bricksetUserSet = _bricksetUserRepository.GetSet(bricksetUser.BricksetUsername, bricksetUserSetUnderTest.Set.SetId); Check.That(bricksetUserSet.Set.SetId).IsEqualTo(bricksetUserSetUnderTest.Set.SetId); }
public void AddOrUpdateSet_BricksetUserSetDoesNotExist_InsertsAndReturnsModel() { var set = ModelsSetup.GetSetUnderTest(); var bricksetUser = ModelsSetup.GetBricksetUserUnderTest(); set = InsertData(set); InsertData(bricksetUser); var bricksetUserSetUnderTest = new BricksetUserSet { Set = set, Wanted = false, Owned = true, QuantityOwned = 10 }; var bricksetUserSet = _bricksetUserRepository.AddOrUpdateSet(bricksetUser.BricksetUsername, bricksetUserSetUnderTest); Check.That(bricksetUserSet).HasFieldsWithSameValues(bricksetUserSetUnderTest); }
public async Task SynchronizeBricksetPrimaryUser_SynchronizationTimestampSetAndHasSetsToUpdateAndHasNewRemoteSets_UpdatesRemoteCollectionAndAddRemoteSetToLocalExceptAlreadyLocalSets() { const string apiKey = "APIKEY"; const string userHash = "USERHASH"; const string testUser = "******"; _bricksetUserRepository.Add(BricksetUserType.Primary, testUser); var themesList = JsonConvert.DeserializeObject <List <Themes> >(GetResultFileFromResource(Constants.JsonFileGetThemes)); var subthemesList = JsonConvert.DeserializeObject <List <Subthemes> >(GetResultFileFromResource(Constants.JsonFileGetSubthemes)); var setsList = JsonConvert.DeserializeObject <List <Sets> >(GetResultFileFromResource(Constants.JsonFileGetSets)); var testSetOwned = setsList[0]; var ownedTheme = themesList.First(theme => theme.Theme == testSetOwned.Theme).ToTheme(); ownedTheme = _themeRepository.AddOrUpdate(ownedTheme); var ownedSubtheme = subthemesList.First(subtheme => subtheme.Theme == testSetOwned.Theme && subtheme.Subtheme == testSetOwned.Subtheme).ToSubtheme(); ownedSubtheme.Theme = ownedTheme; ownedSubtheme = _subthemeRepository.AddOrUpdate(ownedSubtheme); var ownedSet = testSetOwned.ToSet(); ownedSet.Theme = ownedTheme; ownedSet.Subtheme = ownedSubtheme; ownedSet = _setRepository.AddOrUpdate(ownedSet); var testSetWanted = setsList[1]; testSetWanted.Collection = new SetCollection { Wanted = true }; var wantedTheme = themesList.First(theme => theme.Theme == testSetWanted.Theme).ToTheme(); wantedTheme = wantedTheme.Name == ownedTheme.Name ? ownedTheme : _themeRepository.AddOrUpdate(wantedTheme); var wantedSubtheme = subthemesList.First(subtheme => subtheme.Theme == testSetWanted.Theme && subtheme.Subtheme == testSetWanted.Subtheme).ToSubtheme(); wantedSubtheme.Theme = wantedTheme; wantedSubtheme = wantedSubtheme.Name == ownedSubtheme.Name && wantedSubtheme.Theme.Name == ownedSubtheme.Theme.Name ? wantedSubtheme = ownedSubtheme : _subthemeRepository.AddOrUpdate(wantedSubtheme); var wantedSet = testSetWanted.ToSet(); wantedSet.Theme = wantedTheme; wantedSet.Subtheme = wantedSubtheme; wantedSet = _setRepository.AddOrUpdate(wantedSet); _bricksetUserRepository.AddOrUpdateSet(testUser, new BricksetUserSet { Set = ownedSet, Owned = true, QuantityOwned = 2 }); _bricksetUserRepository.UpdateUserSynchronizationTimestamp(testUser, DateTimeOffset.Now.AddSeconds(-1)); var bricksetUserSet = new BricksetUserSet { Set = ownedSet, Owned = true, QuantityOwned = 1 }; _bricksetUserRepository.AddOrUpdateSet(testUser, bricksetUserSet); var bricksetApiService = Substitute.For <IBricksetApiService>(); bricksetApiService .GetSets(Arg.Is <GetSetsParameters>(parameter => parameter.Owned.Value)) .Returns(new List <Sets>()); bricksetApiService .GetSets(Arg.Is <GetSetsParameters>(parameter => parameter.Wanted.Value)) .Returns(new List <Sets> { testSetWanted }); var userSynchronizer = CreateTarget(bricksetApiService); await userSynchronizer.SynchronizeBricksetPrimaryUser(apiKey, testUser, userHash).ConfigureAwait(false); var user = _bricksetUserRepository.Get(testUser); await bricksetApiService .Received(). SetCollection(Arg.Any <SetCollectionParameters>()).ConfigureAwait(false); Check.That(user.Sets).Not.IsEmpty(); Check.That(user.Sets.Where(userSet => userSet.Set.SetId == bricksetUserSet.Set.SetId && userSet.Owned == bricksetUserSet.Owned && userSet.QuantityOwned == bricksetUserSet.QuantityOwned)).Not.IsEmpty(); Check.That(user.Sets.Where(userSet => userSet.Set.SetId == testSetWanted.SetId && userSet.Wanted == testSetWanted.Collection.Wanted)).Not.IsEmpty(); Check.That(user.UserSynchronizationTimestamp).HasAValue(); }
public async Task SynchronizeBricksetPrimaryUser_SynchronizationTimestampSetAndDoesNotHaveSetsToUpdate_DoesNotUpdateRemoteCollection() { const string apiKey = "APIKEY"; const string userHash = "USERHASH"; const string testUser = "******"; _bricksetUserRepository.Add(BricksetUserType.Primary, testUser); var themesList = JsonConvert.DeserializeObject <List <Themes> >(GetResultFileFromResource(Constants.JsonFileGetThemes)); var subthemesList = JsonConvert.DeserializeObject <List <Subthemes> >(GetResultFileFromResource(Constants.JsonFileGetSubthemes)); var setsList = JsonConvert.DeserializeObject <List <Sets> >(GetResultFileFromResource(Constants.JsonFileGetSets)); var testSetOwned = setsList[0]; var ownedTheme = themesList.First(theme => theme.Theme == testSetOwned.Theme).ToTheme(); var ownedSubtheme = subthemesList.First(subtheme => subtheme.Theme == testSetOwned.Theme && subtheme.Subtheme == testSetOwned.Subtheme).ToSubtheme(); ownedSubtheme.Theme = ownedTheme; var ownedSet = testSetOwned.ToSet(); ownedSet.Theme = ownedTheme; ownedSet.Subtheme = ownedSubtheme; _themeRepository.AddOrUpdate(ownedTheme); _subthemeRepository.AddOrUpdate(ownedSubtheme); ownedSet = _setRepository.AddOrUpdate(ownedSet); var bricksetUserSet = new BricksetUserSet { Set = ownedSet, Owned = true, QuantityOwned = 2 }; _bricksetUserRepository.AddOrUpdateSet(testUser, bricksetUserSet); _bricksetUserRepository.UpdateUserSynchronizationTimestamp(testUser, DateTimeOffset.Now.AddSeconds(1)); var bricksetApiService = Substitute.For <IBricksetApiService>(); bricksetApiService .GetSets(Arg.Is <GetSetsParameters>(parameter => parameter.Owned.Value)) .Returns(new List <Sets>()); bricksetApiService .GetSets(Arg.Is <GetSetsParameters>(parameter => parameter.Wanted.Value)) .Returns(new List <Sets>()); var userSynchronizer = CreateTarget(bricksetApiService); await userSynchronizer.SynchronizeBricksetPrimaryUser(apiKey, testUser, userHash).ConfigureAwait(false); var user = _bricksetUserRepository.Get(testUser); await bricksetApiService .DidNotReceive() .SetCollection(Arg.Any <SetCollectionParameters>()).ConfigureAwait(false); Check.That(user.Sets) .Not.IsEmpty() .And.CountIs(1); Check.That(user.Sets[0].Set.SetId).IsEqualTo(bricksetUserSet.Set.SetId); Check.That(user.Sets[0].QuantityOwned).IsEqualTo(bricksetUserSet.QuantityOwned); Check.That(user.UserSynchronizationTimestamp).HasAValue(); }