package eu.dnetlib.espas.data.harvest;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;

import org.junit.Test;

public class TestSubject
{
   @Test
   public void testSubjectToString()
   {
      String expected = "<dc:subject scheme=\"http://www.digest.org/2.1\">Physiography-Landforms</dc:subject>";
      Subject subject = new Subject();
      subject.setSubject("Physiography-Landforms");
      subject.put(Subject.ATT_SCHEME, "http://www.digest.org/2.1");
      assertEquals("Invalid shubject xml element.", expected, subject.toString());
   }

   @Test
   public void testNotEqual()
   {
      // Test inequality on the attribute maps.
      Subject expected = new Subject();
      expected.put("key1", "value1");
      expected.put("key2", "value2");
      expected.put("key3", "value3");
      expected.put("key4", "value4");
      Subject actual = new Subject();
      actual.put("key1", "value1");
      actual.put("key2", "value2");
      actual.put("key3", "value3");
      assertFalse("These csw record objects should not be equal.", expected.equals(actual));

      // Test inequality on the "identifier" data member, with a missing value from the actual.
      assertFalse("The subject attributes should not be equal now.", expected.getSubjectAttributes().equals(actual.getSubjectAttributes()));
      actual.put("key4", "value4");
      assertEquals("The subject attributes should be equal now.", expected.getSubjectAttributes(), actual.getSubjectAttributes());
      expected.setSubject("subject_subject_1");
      assertFalse("These csw subject objects should not be equal.", expected.equals(actual));
   }

   @Test
   public void testEqual()
   {
      Subject expected = new Subject();
      expected.put("key1", "value1");
      expected.put("key2", "value2");
      expected.put("key3", "value3");
      expected.put("key4", "value4");
      Subject actual = new Subject();
      actual.put("key1", "value1");
      actual.put("key2", "value2");
      actual.put("key3", "value3");
      actual.put("key4", "value4");
      assertEquals("These csw subject objects should be equal.", expected, actual);

      // Test equality on the "identifier" data member.
      expected.setSubject("subject_subject_1");
      actual.setSubject("subject_subject_1");
      assertEquals("These csw subject objects should be equal.", expected, actual);
   }
}
