package denominator.assertj; import org.assertj.core.api.AbstractAssert; import org.assertj.core.internal.Integers; import org.assertj.core.internal.Iterables; import org.assertj.core.internal.Maps; import org.assertj.core.internal.Objects; import java.util.List; import java.util.Map; import denominator.model.ResourceRecordSet; import denominator.model.profile.Geo; import static org.assertj.core.data.MapEntry.entry; import static org.assertj.core.util.Arrays.array; public class ResourceRecordSetAssert extends AbstractAssert<ResourceRecordSetAssert, ResourceRecordSet> { Objects objects = Objects.instance(); Integers integers = Integers.instance(); Iterables iterables = Iterables.instance(); Maps maps = Maps.instance(); public ResourceRecordSetAssert(ResourceRecordSet actual) { super(actual, ResourceRecordSetAssert.class); } public ResourceRecordSetAssert hasName(String expected) { isNotNull(); objects.assertEqual(info, actual.name(), expected); return this; } public ResourceRecordSetAssert hasType(String expected) { isNotNull(); objects.assertEqual(info, actual.type(), expected); return this; } public ResourceRecordSetAssert hasQualifier(String expected) { isNotNull(); objects.assertEqual(info, actual.qualifier(), expected); return this; } public ResourceRecordSetAssert hasTtl(Integer expected) { isNotNull(); objects.assertEqual(info, actual.ttl(), expected); return this; } /** Asserts {@code records} are the only ones present, in any order. */ public ResourceRecordSetAssert containsOnlyRecords(Map<String, Object>... records) { iterables.assertContainsOnly(info, actual.records(), records); return this; } public ResourceRecordSetAssert containsExactlyRecords(Map<String, Object>... records) { iterables.assertContainsExactly(info, actual.records(), records); return this; } public ResourceRecordSetAssert containsExactlyRecords(List<? extends Map<String, Object>> records) { return containsExactlyRecords(records.toArray(new Map[records.size()])); } public ResourceRecordSetAssert hasGeo(Geo expected) { isNotNull(); objects.assertEqual(info, actual.geo(), expected); return this; } public ResourceRecordSetAssert containsRegion(String region, String... territories) { isNotNull(); maps.assertContains(info, actual.geo().regions(), array(entry(region, java.util.Arrays.asList(territories)))); return this; } public ResourceRecordSetAssert hasWeight(int expected) { isNotNull(); objects.assertNotNull(info, actual.weighted()); integers.assertEqual(info, actual.weighted().weight(), expected); return this; } public ResourceRecordSetAssert isValid() { isNotNull(); objects.assertNotNull(info, actual.name()); objects.assertNotNull(info, actual.type()); iterables.assertNotEmpty(info, actual.records()); return this; } public ResourceRecordSetAssert isValidWeighted() { isValid(); objects.assertNotNull(info, actual.qualifier()); objects.assertNotNull(info, actual.weighted()); integers.assertIsNotNegative(info, actual.weighted().weight()); return this; } public ResourceRecordSetAssert isValidGeo() { isValid(); objects.assertNotNull(info, actual.qualifier()); objects.assertNotNull(info, actual.geo()); maps.assertNotEmpty(info, actual.geo().regions()); return this; } }