// Copyright 2016 The Domain Registry Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package google.registry.testing; import static com.google.common.truth.Truth.assertAbout; import com.google.common.base.Optional; import com.google.common.truth.AbstractVerb.DelegatedVerb; import com.google.common.truth.FailureStrategy; import com.google.common.truth.Subject; import google.registry.model.domain.Period; import google.registry.model.reporting.HistoryEntry; import google.registry.testing.TruthChainer.And; import java.util.Objects; /** Utility methods for asserting things about {@link HistoryEntry} instances. */ public class HistoryEntrySubject extends Subject { private String customDisplaySubject; /** A factory for instances of this subject. */ private static class SubjectFactory extends ReflectiveSubjectFactory{} public HistoryEntrySubject(FailureStrategy strategy, HistoryEntry subject) { super(strategy, subject); } @Override public String getDisplaySubject() { return Optional.fromNullable(customDisplaySubject).or(super.getDisplaySubject()); } public HistoryEntrySubject withCustomDisplaySubject(String customDisplaySubject) { this.customDisplaySubject = customDisplaySubject; return this; } public And hasType(HistoryEntry.Type type) { return hasValue(type, getSubject().getType(), "has type"); } public And hasClientId(String clientId) { return hasValue(clientId, getSubject().getClientId(), "has client ID"); } public And hasPeriod() { if (getSubject().getPeriod() == null) { fail("has a period"); } return new And(this); } public And hasPeriodYears(int years) { return hasPeriod().and() .hasValue(Period.Unit.YEARS, getSubject().getPeriod().getUnit(), "has period in").and() .hasValue(years, getSubject().getPeriod().getValue(), "has period length"); } public And hasNoXml() { if (getSubject().getXmlBytes() != null) { fail("has no xml"); } return new And(this); } public And hasMetadataReason(String reason) { return hasValue(reason, getSubject().getReason(), "has metadata reason"); } public And hasMetadataRequestedByRegistrar( boolean requestedByRegistrar) { if (getSubject().getRequestedByRegistrar() != requestedByRegistrar) { fail("has metadata requestedByRegistrar with value", requestedByRegistrar); } return new And(this); } protected void failWithBadResults(String dualVerb, Object expected, Object actual) { failWithBadResults(dualVerb, expected, dualVerb, actual); } protected And hasValue(E expected, E actual, String verb) { if (!Objects.equals(expected, actual)) { failWithBadResults(verb, expected, actual); } return new And(this); } public static DelegatedVerb assertAboutHistoryEntries() { return assertAbout(new SubjectFactory()); } }