public void GivenDemographicForAnyAgeAndSpecificState_WhenCheckingIfTheDemographicAppliesToAMember_ThenReturnTrueOnlyIfMemberIsInThatState([ValueSource("AllStates")] State memberState, [ValueSource("AllStates")] State demographicState) { var member = new Member("Name", memberState, new DateTime(1970, 1, 1)); var demographic = new Demographic(demographicState, null, null); var applies = demographic.Contains(member, DateTime.UtcNow); Assert.That(applies, Is.EqualTo(memberState == demographicState)); }
public void GivenDemographicForAllMembers_WhenCheckingIfTheDemographicAppliesToAMember_ThenReturnTrue() { var member = new Member("Name", State.Wa, new DateTime(1970, 1, 1)); var demographic = Demographic.AllMembers; var applies = demographic.Contains(member, DateTime.UtcNow); Assert.That(applies, Is.True); }
public void GivenDemographicWithStateAndAgeRange_WhenCheckingIfTheDemographicAppliesToAMember_ThenReturnTrueOnlyIfTheMemberConformsToAllParameters([Range(1, 25)] int age, [ValueSource("AllStates")] State state) { var now = DateTime.UtcNow; var member = new Member("Name", state, now.AddYears(-age)); var demographic = new Demographic(State.Wa, 18, 19); var applies = demographic.Contains(member, now); Assert.That(applies, Is.EqualTo(state == State.Wa && (age == 18 || age == 19))); }
public void GivenDemographicForAnyStateWithMinimumAge_WhenCheckingIfTheDemographicAppliesToAMember_ThenReturnTrueOnlyIfMemberIsThatAgeOrOlder([Range(1, 25)] int memberAge, [Range(1, 25)] int minimumAge) { var now = DateTime.UtcNow; var member = new Member("Name", State.Wa, now.AddYears(-(memberAge+1)).AddSeconds(1)); var demographic = new Demographic(null, minimumAge, null); var applies = demographic.Contains(member, now); Assert.That(applies, Is.EqualTo(memberAge >= minimumAge)); }
public bool Contains(Member member, DateTime now) { var age = member.GetAge(now); if (MinimumAge != null && age < MinimumAge) return false; if (MaximumAge != null && age > MaximumAge) return false; if (State != null && member.State != State) return false; return true; }
public void GivenProductsWithCurrentCampaignWithSomeThatApplyToTheMember_WhenQuerying_ThenReturnTheProductsThatApplyToTheMember() { var member = new Member("Name", State.Wa, _now.AddYears(-10).AddDays(-1)); var products = Builder<Product>.CreateListOfSize(3) .TheFirst(1).WithConstructor(() => new Product("Product 1 (applies)")) .And(p => p.CreateCampaign(_now, Demographic.AllMembers, _now.AddDays(-1), _now.AddDays(1))) .TheNext(1).WithConstructor(() => new Product("Product 2 (doesn't apply)")) .And(p => p.CreateCampaign(_now, new Demographic(State.Act, null, null), _now.AddDays(-1), _now.AddDays(1))) .TheNext(1).WithConstructor(() => new Product("Product 3 (applies)")) .And(p => p.CreateCampaign(_now, new Demographic(State.Wa, 9, 11), _now.AddDays(-1), _now.AddDays(1))) .Build(); products.ToList().ForEach(p => Session.Save(p)); var result = Execute(new GetProductsForMember(_now, member)); Assert.That(result.Select(p => p.Name).ToArray(), Is.EqualTo(new[]{products[0].Name, products[2].Name})); }