Ejemplo n.º 1
0
        public async Task GetReturnsProfileWithoutGenderWhenGenderIsUnapprovedTest()
        {
            var profile = await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>()
                          .Set(x => x.Gender = null)
                          .ClearLanguages().Save(_logger)
                          .ConfigureAwait(false);

            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            // Save a gender that is not approved
            profile = await profile.Set(x => x.Gender = Guid.NewGuid().ToString()).Save(_logger).ConfigureAwait(false);

            var filters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Skill,
                    CategoryName  = profile.Skills.Skip(2).First().Name
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            var actual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            var result = actual.Single(x => x.Id == profile.Id);

            result.Should().BeEquivalentTo(profile, opt => opt.Excluding(x => x.Gender).ExcludingMissingMembers());
            result.Gender.Should().BeNull();
        }
Ejemplo n.º 2
0
        public async Task GetReturnsProfileWithCaseInsensitiveFilterMatchTest(string filterName)
        {
            var category = new NewCategory
            {
                Group = CategoryGroup.Gender,
                Name  = "Female"
            };

            await category.Save(_logger).ConfigureAwait(false);

            var profile = await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>().Set(x => x.Gender = "Female")
                          .Save(_logger).ConfigureAwait(false);

            var filters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Gender,
                    CategoryName  = filterName
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            var actual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            actual.Single(x => x.Id == profile.Id).Should().BeEquivalentTo(profile, opt => opt.ExcludingMissingMembers());
        }
Ejemplo n.º 3
0
        public async Task GetDoesNotReturnProfileAfterLanguageRemovedTest()
        {
            var account           = Model.Create <Account>();
            var profile           = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>();
            var languageToRemoved = profile.Languages.First();
            var filters           = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Language,
                    CategoryName  = languageToRemoved
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            profile = await profile.Save(_logger).ConfigureAwait(false);

            var firstActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            firstActual.Single(x => x.Id == profile.Id)
            .Should().BeEquivalentTo(profile, opt => opt.ExcludingMissingMembers());

            profile = await profile.Set(x => x.Languages.Remove(languageToRemoved)).Save(_logger, account)
                      .ConfigureAwait(false);

            var secondActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            secondActual.Should().NotContain(x => x.Id == profile.Id);
        }
Ejemplo n.º 4
0
        public async Task GetReturnProfileAfterSkillAddedToMatchExistingFilterTest()
        {
            var account  = Model.Create <Account>();
            var newSkill = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Skill>();
            var profile  = await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>().Save(_logger, account)
                           .ConfigureAwait(false);

            var filters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Skill,
                    CategoryName  = newSkill.Name
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            // Save the current categories
            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            var firstActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            firstActual.Should().NotContain(x => x.Id == profile.Id);

            await profile.Set(x => x.Skills.Add(newSkill)).Save(_logger, account).ConfigureAwait(false);

            // Save the updated categories
            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            var secondActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            secondActual.Single(x => x.Id == profile.Id)
            .Should().BeEquivalentTo(profile, opt => opt.ExcludingMissingMembers());
        }
Ejemplo n.º 5
0
        public async Task GetReturnsMultipleProfilesMatchingFiltersTest()
        {
            var firstProfile = await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>().Save(_logger)
                               .ConfigureAwait(false);

            var secondProfile = await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>()
                                .Set(x => x.Gender = firstProfile.Gender).Save(_logger).ConfigureAwait(false);

            var filters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Gender,
                    CategoryName  = firstProfile.Gender
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            var actual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            actual.Single(x => x.Id == firstProfile.Id)
            .Should().BeEquivalentTo(firstProfile, opt => opt.ExcludingMissingMembers());
            actual.Single(x => x.Id == secondProfile.Id)
            .Should().BeEquivalentTo(secondProfile, opt => opt.ExcludingMissingMembers());
        }
Ejemplo n.º 6
0
        public async Task GetIgnoresFiltersOnUnapprovedCategoriesTest()
        {
            var firstProfile = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>().Set(x => x.Languages.Clear())
                               .Set(x => x.Languages.Add("English"));

            await firstProfile.SaveAllCategories(_logger).ConfigureAwait(false);

            firstProfile = await firstProfile.Save(_logger).ConfigureAwait(false);

            var secondProfile = await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>()
                                .Set(x => x.Languages.Clear()).Set(x => x.Languages.Add("English"))
                                .Set(x => x.Gender = Guid.NewGuid().ToString()).Save(_logger).ConfigureAwait(false);

            var filters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Language,
                    CategoryName  = firstProfile.Languages.First()
                },
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Gender,
                    CategoryName  = secondProfile.Gender
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            var actual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            actual.Single(x => x.Id == firstProfile.Id)
            .Should().BeEquivalentTo(firstProfile, opt => opt.ExcludingMissingMembers());
            actual.Single(x => x.Id == secondProfile.Id)
            .Should().BeEquivalentTo(secondProfile, opt => opt.ExcludingMissingMembers().Excluding(x => x.Gender));
        }
Ejemplo n.º 7
0
        public async Task GetDoesReturnProfileAfterGenderUpdatedMatchesExistingFilterTest()
        {
            var account   = Model.Create <Account>();
            var profile   = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>().ClearSkills().ClearLanguages();
            var newGender = Guid.NewGuid().ToString();
            var filters   = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Gender,
                    CategoryName  = newGender
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            profile = await profile.Save(_logger, account).ConfigureAwait(false);

            var firstActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            firstActual.Should().NotContain(x => x.Id == profile.Id);

            profile.Gender = newGender;

            // Save the gender
            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            await profile.Save(_logger, account).ConfigureAwait(false);

            var secondActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            secondActual.Single(x => x.Id == profile.Id)
            .Should().BeEquivalentTo(profile, opt => opt.ExcludingMissingMembers());
        }
Ejemplo n.º 8
0
        public async Task DeleteRemovesAccountFromSearchResultsTest()
        {
            var profile  = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>();
            var account  = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Account>();
            var identity = ClaimsIdentityFactory.Build(account, profile);
            var filters  = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Language,
                    CategoryName  = profile.Languages.Skip(2).First()
                }
            };
            var searchAddress = ApiLocation.ProfilesMatching(filters);

            var actual = await profile.Save(_logger, account).ConfigureAwait(false);

            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            var address = ApiLocation.AccountProfile;

            await Client.Delete(address, _logger, identity).ConfigureAwait(false);

            var profileResults = await Client.Get <List <ProfileResult> >(searchAddress, _logger).ConfigureAwait(false);

            profileResults.Should().NotContain(x => x.Id == profile.Id);

            await IsDeleted(actual.Id, identity).ConfigureAwait(false);
        }
Ejemplo n.º 9
0
        public async Task GetReturnsNewGenderAfterApprovedForAnonymousUserTest()
        {
            var account = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Account>();
            var profile = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>();

            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            profile = await profile.Save(_logger, account).ConfigureAwait(false);

            profile.Gender = Guid.NewGuid().ToString("N");

            profile = await profile.Save(_logger, account).ConfigureAwait(false);

            var firstFilters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Skill,
                    CategoryName  = profile.Skills.First().Name
                }
            };
            var firstAddress = ApiLocation.ProfilesMatching(firstFilters);

            var firstActual = await Client.Get <List <ProfileResult> >(firstAddress, _logger).ConfigureAwait(false);

            firstActual.Single(x => x.Id == profile.Id).Gender.Should().BeNull();

            var administrator = ClaimsIdentityFactory.Build().AsAdministrator();

            await new NewCategory {
                Group = CategoryGroup.Gender, Name = profile.Gender
            }.Save(_logger, administrator)
            .ConfigureAwait(false);

            var secondFilters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Gender,
                    CategoryName  = profile.Gender
                }
            };
            var secondAddress = ApiLocation.ProfilesMatching(secondFilters);

            var secondActual = await Client.Get <List <ProfileResult> >(firstAddress, _logger).ConfigureAwait(false);

            secondActual.Single(x => x.Id == profile.Id).Gender.Should().Be(profile.Gender);
        }
Ejemplo n.º 10
0
        public async Task GetReturnsGenderCorrectlyWhenToggledBetweenVisibleAndInvisibleTest()
        {
            var profile = Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>()
                          .Set(x => x.Gender = Guid.NewGuid().ToString());
            var filters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Language,
                    CategoryName  = profile.Languages.Skip(2).First()
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            await profile.SaveAllCategories().ConfigureAwait(false);

            profile = await profile.Save().ConfigureAwait(false);

            var firstActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            firstActual.Single(x => x.Id == profile.Id).Gender.Should().Be(profile.Gender);

            var administrator   = ClaimsIdentityFactory.Build().AsAdministrator();
            var categoryAddress = ApiLocation.Category(CategoryGroup.Gender, profile.Gender);
            var updateCategory  = new UpdateCategory
            {
                Visible = false
            };

            // Hide the gender category
            await Client.Put(categoryAddress, _logger, updateCategory, administrator, HttpStatusCode.NoContent)
            .ConfigureAwait(false);

            var secondActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            secondActual.Single(x => x.Id == profile.Id).Gender.Should().BeNullOrEmpty();

            updateCategory.Visible = true;

            // Show the gender category again
            await Client.Put(categoryAddress, _logger, updateCategory, administrator, HttpStatusCode.NoContent)
            .ConfigureAwait(false);

            var thirdActual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            thirdActual.Single(x => x.Id == profile.Id).Gender.Should().Be(profile.Gender);
        }
Ejemplo n.º 11
0
        public async Task GetReturnsProfileWithAllCategoryFiltersAppliedTest()
        {
            var profile = await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>().Save(_logger)
                          .ConfigureAwait(false);

            var filters = new List <ProfileFilter>();

            if (string.IsNullOrWhiteSpace(profile.Gender))
            {
                filters.Add(
                    new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Gender,
                    CategoryName  = profile.Gender
                });
            }

            foreach (var language in profile.Languages)
            {
                filters.Add(
                    new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Language,
                    CategoryName  = language
                });
            }

            foreach (var skill in profile.Skills)
            {
                filters.Add(
                    new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Skill,
                    CategoryName  = skill.Name
                });
            }

            var address = ApiLocation.ProfilesMatching(filters);

            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            var actual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            actual.Single(x => x.Id == profile.Id).Should().BeEquivalentTo(profile, opt => opt.ExcludingMissingMembers());
        }
Ejemplo n.º 12
0
        public async Task GetReturnsEmptyWhenNoProfilesMatchFilterTest(CategoryGroup group)
        {
            // Ensure there is at least one profile available
            await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>().Save(_logger).ConfigureAwait(false);

            var filters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = group,
                    CategoryName  = Guid.NewGuid().ToString()
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            var actual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            actual.Should().BeEmpty();
        }
Ejemplo n.º 13
0
        public async Task GetReturnsProfileWithSkillFilterTest()
        {
            var profile = await Model.UsingBuildStrategy <ProfileBuildStrategy>().Create <Profile>().Save(_logger)
                          .ConfigureAwait(false);

            var filters = new List <ProfileFilter>
            {
                new ProfileFilter
                {
                    CategoryGroup = CategoryGroup.Skill,
                    CategoryName  = profile.Skills.Skip(2).First().Name
                }
            };
            var address = ApiLocation.ProfilesMatching(filters);

            await profile.SaveAllCategories(_logger).ConfigureAwait(false);

            var actual = await Client.Get <List <ProfileResult> >(address, _logger).ConfigureAwait(false);

            actual.Single(x => x.Id == profile.Id).Should().BeEquivalentTo(profile, opt => opt.ExcludingMissingMembers());
        }