+ assertThat(testField.isPresent(), is(false));
+ }
+
+ @Test
+ public void testDeletingANonExistingField() {
+ Field testField = profile.addField("TestField");
+ profile.removeField(testField);
+ profile.removeField(testField);
+ }
+
+ @Test
+ public void testGettingFieldList() {
+ Field firstField = profile.addField("First");
+ Field secondField = profile.addField("Second");
+ List<Field> fields = profile.getFields();
+ assertThat(fields, contains(firstField, secondField));
+ }
+
+ @Test
+ public void testMovingAFieldUp() {
+ Field firstField = profile.addField("First");
+ Field secondField = profile.addField("Second");
+ profile.moveFieldUp(secondField);
+ List<Field> fields = profile.getFields();
+ assertThat(fields, contains(secondField, firstField));
+ }
+
+ @Test
+ public void testMovingTheFirstFieldUp() {
+ Field firstField = profile.addField("First");
+ Field secondField = profile.addField("Second");
+ profile.moveFieldUp(firstField);
+ List<Field> fields = profile.getFields();
+ assertThat(fields, contains(firstField, secondField));
+ }
+
+ @Test
+ public void testMovingAFieldDown() {
+ Field firstField = profile.addField("First");
+ Field secondField = profile.addField("Second");
+ profile.moveFieldDown(firstField);
+ List<Field> fields = profile.getFields();
+ assertThat(fields, contains(secondField, firstField));
+ }
+
+ @Test
+ public void testMovingTheLastFieldDown() {
+ Field firstField = profile.addField("First");
+ Field secondField = profile.addField("Second");
+ profile.moveFieldDown(secondField);
+ List<Field> fields = profile.getFields();
+ assertThat(fields, contains(firstField, secondField));
+ }
+
+ @Test
+ public void testModifyingAProfile() {
+ profile.modify().setFirstName("First").setMiddleName("M.").setLastName("Last").setBirthYear(2013).setBirthMonth(10).setBirthDay(24).update();
+ assertThat(profile.getFirstName(), is("First"));
+ assertThat(profile.getMiddleName(), is("M."));
+ assertThat(profile.getLastName(), is("Last"));
+ assertThat(profile.getBirthYear(), is(2013));
+ assertThat(profile.getBirthMonth(), is(10));
+ assertThat(profile.getBirthDay(), is(24));
+ }
+
+ @Test
+ public void testSettingAnAvatar() {
+ profile.setAvatar(of("avatar1"));
+ assertThat(profile.getAvatar(), is("avatar1"));
+ }
+
+ @Test
+ public void testSettingNoAvatar() {
+ profile.setAvatar(Optional.<String>absent());
+ assertThat(profile.getAvatar(), is((String) null));
+ }
+
+ @Test
+ public void testDuplicatingAProfileAndGettingTheSameFingerprint() {
+ Profile secondProfile = new Profile(profile);
+ assertThat(profile.getFingerprint(), is(secondProfile.getFingerprint()));
+ }
+
+ @Test
+ public void testGettingAFingerprint() {
+ String fingerprint = profile.getFingerprint();
+ assertThat(fingerprint, notNullValue());
+ }
+
+ @Test
+ public void testThatSettingProfileFieldsChangesTheFingerprint() {
+ List<String> fingerprints = Lists.newArrayList();
+ String fingerprint = profile.getFingerprint();
+ assertThat(fingerprint, notNullValue());
+ fingerprints.add(fingerprint);
+
+ Field testField = profile.addField("TestField");
+ profile.setField(testField, "Value");
+ verifyFingerprintAndAddItToListOfFingerprints(fingerprints);
+
+ profile.modify().setFirstName("First").update();
+ verifyFingerprintAndAddItToListOfFingerprints(fingerprints);
+
+ profile.modify().setMiddleName("M.").update();
+ verifyFingerprintAndAddItToListOfFingerprints(fingerprints);
+
+ profile.modify().setLastName("Last").update();
+ verifyFingerprintAndAddItToListOfFingerprints(fingerprints);
+
+ profile.modify().setBirthYear(2013).update();
+ verifyFingerprintAndAddItToListOfFingerprints(fingerprints);
+
+ profile.modify().setBirthMonth(10).update();
+ verifyFingerprintAndAddItToListOfFingerprints(fingerprints);
+
+ profile.modify().setBirthDay(24).update();
+ verifyFingerprintAndAddItToListOfFingerprints(fingerprints);
+
+ profile.setAvatar(of("avatar1"));
+ verifyFingerprintAndAddItToListOfFingerprints(fingerprints);
+ }
+
+ private void verifyFingerprintAndAddItToListOfFingerprints(List<String> fingerprints) {
+ String fingerprint = profile.getFingerprint();
+ assertThat(fingerprint, notNullValue());
+ assertThat(fingerprints, not(hasItem(fingerprint)));
+ fingerprints.add(fingerprint);