package com.avaje.tests.enhancement;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.tests.model.basic.Product;
/**
* Note take care if you run this test in an IDE with a debugger as that can trigger the equals and
* hashCode (and the identity value can get populated un-normally).
*/
public class TestEnhancementEquals extends BaseTestCase {
@Test
public void testEqualsBasedOnIdValue() {
Product product1 = new Product();
product1.setId(345);
product1.setName("blah");
Product product2 = new Product();
product2.setId(345);
Assert.assertEquals("equal based on id", product1, product2);
Assert.assertEquals("hashCode equal based on id", product1.hashCode(), product2.hashCode());
product2.setName("kumera");
Assert.assertEquals("still equal based on identity", product1, product2);
Assert.assertEquals("still hashCode equal based on id", product1.hashCode(), product2.hashCode());
}
@Test
public void testWhenEqualsTouchedFirst() {
Product product1 = new Product();
product1.setName("blah");
int hashcode1 = product1.hashCode();
// equals has been called so the hashCode and 'identity' has been baked in
product1.setId(345);
int hashcode2 = product1.hashCode();
Assert.assertEquals("hashCode can't change",hashcode1, hashcode2);
Product product2 = new Product();
product2.setId(345);
Assert.assertFalse("Not equal now", product1.equals(product2));
Assert.assertTrue("Different hashCode", product1.hashCode() != product2.hashCode());
}
}