public void Adding_new_contact_works() { var firstname = NonEmptyStringOO.CreateBang("Homer"); var lastname = NonEmptyStringOO.CreateBang("Simpson"); var id = Guid.NewGuid(); var dob = Some(new DateTime(1956, 5, 12)); var twitterProfileUrl = NonEmptyStringOO.Create("https://twitter.com/homerjsimpson"); var address = None; var contact = new ContactOO( id, firstname, lastname, dob, twitterProfileUrl, address, new EmailContact()); var sut = new AddressbookOO(); // important design decision: do we have state in Addressbook or not? // should the following code return a modified list or have internal state? // // with state sut.Contacts.Should().BeEmpty(); sut.AddContact(contact); sut.Contacts.Should().HaveCount(1, "we added 1 contact"); }
private static AddressOO CreateAddress() { var zipCode = ZipcodeOO.CreateBang("58008"); var street = NonEmptyStringOO.CreateBang("742 Evergreen Terrace"); var city = NonEmptyStringOO.CreateBang("Springfield"); var address = AddressOO.Create(street, city, zipCode); return(address); }
public void Two_addresses_with_same_content_are_equal() { var zipCode = ZipcodeOO.CreateBang("12345"); var street = NonEmptyStringOO.CreateBang("742 Evergreen Terrace"); var city = NonEmptyStringOO.CreateBang("Springfield"); var address1 = AddressOO.Create(street, city, zipCode); var address2 = AddressOO.Create(street, city, zipCode); address1.Should().Be(address2); }
public void Creating_a_new_contact_happy_path() { var contact = CreateHomer(); contact.FirstName.Value.Should().Be("Homer"); contact.LastName.Value.Should().Be("Simpson"); contact.DateOfBirth.Should().BeEquivalentTo(F.Some(new DateTime(1956, 5, 12))); contact.TwitterProfileUrl.Should() .BeEquivalentTo(F.Some(NonEmptyStringOO.CreateBang("https://twitter.com/homerjsimpson"))); contact.ContactMethod.Should().BeOfType <EmailContact>(); }
public void Creating_address_works() { var zipCode = ZipcodeOO.CreateBang("12345"); var street = NonEmptyStringOO.CreateBang("742 Evergreen Terrace"); var city = NonEmptyStringOO.CreateBang("Springfield"); var addressOO = AddressOO.Create(street, city, zipCode); addressOO.City.Value.Should().Be("Springfield"); addressOO.Street.Value.Should().Be("742 Evergreen Terrace"); addressOO.Zipcode.Value.Should().Be("12345"); }
public void Two_addresses_with_different_content_are_not_equal() { var zipCode = ZipcodeOO.CreateBang("12345"); var street = NonEmptyStringOO.CreateBang("742 Evergreen Terrace"); var city1 = NonEmptyStringOO.CreateBang("Springfield"); var city2 = NonEmptyStringOO.CreateBang("Shelbyville"); var address1 = AddressOO.Create(street, city1, zipCode); var address2 = AddressOO.Create(street, city2, zipCode); address1.Should().NotBe(address2); }
public void Changing_optional_twitter_url_works_and_does_not_modify_id(string newTwitterUrl, bool isValid) { // Arrange var contact = CreateHomer(); var twitterUrl = NonEmptyStringOO.Create(newTwitterUrl); // Act var result = contact.ChangeTwitterUrl(twitterUrl); // Assert result.TwitterProfileUrl.Should().Be(isValid ? twitterUrl : F.None); result.Id.Should().Be(contact.Id); }
public void NonEmptyStringOO_extension_handles_input_as_expected(string input, bool shouldPass) { var result = NonEmptyStringOO.Create(input); if (shouldPass) { result.Should().BeEqualToNonEmptyString(input); result.Should().NotBeEqualNonEmptyString(input + "x"); } else { result.Should().BeNone(); } }
public void NonEmptyStringOO_creation_works(string input, bool isValid) { // Act var result = NonEmptyStringOO.Create(input); // Assert result.Should() .NotBeNull() .And.BeOfType <Option <NonEmptyStringOO> >(); result.Match( () => isValid.Should().BeFalse(), x => x.Value.Should().Be(isValid ? input : null)); }
public ContactOO(Guid id, NonEmptyStringOO firstname, NonEmptyStringOO lastname, Option <DateTime> dateOfBirth, Option <NonEmptyStringOO> twitterProfileUrl, Option <AddressOO> address, ContactMethod contactMethod) { Id = id; FirstName = firstname; LastName = lastname; DateOfBirth = dateOfBirth; TwitterProfileUrl = twitterProfileUrl; Address = address; ContactMethod = contactMethod; }
public void Changing_name_works_and_does_not_modify_id( string newFirstName, string newLastName, bool isFirstNameValid, bool isLastNameValid) { // Arrange var contact = CreateHomer(); // Act var result = contact .ChangeFirstName(NonEmptyStringOO.Create(newFirstName)) .ChangeLastName(NonEmptyStringOO.Create(newLastName)); // Assert result.FirstName.Value.Should().Be(isFirstNameValid ? newFirstName : contact.FirstName.Value); result.LastName.Value.Should().Be(isLastNameValid ? newLastName : contact.LastName.Value); result.Id.Should().Be(contact.Id); }
public void Creating_a_zipcode_from_NonEmptyString_works(string input, bool isValid) { var result = ZipcodeOO.Create(NonEmptyStringOO.CreateBang(input)); if (isValid) { result.Match( AssertionHelper.NoneFails, SomeWithStringValueShouldBe(input)); } else { result.Match( AssertionHelper.NoneIsTrue, SomeWithStringValueShouldFail()); } }
private static ContactOO CreateHomer() { var firstname = NonEmptyStringOO.CreateBang("Homer"); var lastname = NonEmptyStringOO.CreateBang("Simpson"); var id = Guid.NewGuid(); var dateOfBirth = new DateTime(1956, 5, 12); var dob = F.Some(dateOfBirth); var twitterProfileUrl = NonEmptyStringOO.Create("https://twitter.com/homerjsimpson"); var address = F.None; var contact = new ContactOO(id, firstname, lastname, dob, twitterProfileUrl, address, new EmailContact()); return(contact); }
public void NonEmptyStringOO_creation_with_bang_works(string input, bool isValid) { if (isValid) { var result = NonEmptyStringOO.CreateBang(input); // Assert result.Should() .NotBeNull() .And.BeOfType <NonEmptyStringOO>(); result.Value.Should().Be(input); } else { Action action = () => NonEmptyStringOO.CreateBang(input); action.Should().Throw <ArgumentException>().WithMessage("String may not be empty or null!"); } }