source: issuevalue/src/test/java/geniusweb/issuevalue/DomainTest.java@ 29

Last change on this file since 29 was 29, checked in by bart, 3 years ago

some minor fixes

File size: 5.6 KB
Line 
1package geniusweb.issuevalue;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertThat;
5import static org.mockito.Mockito.mock;
6import static org.mockito.Mockito.when;
7
8import java.io.IOException;
9import java.math.BigDecimal;
10import java.util.Arrays;
11import java.util.Collection;
12import java.util.HashMap;
13import java.util.HashSet;
14import java.util.LinkedList;
15import java.util.List;
16import java.util.Map;
17
18import org.junit.Test;
19
20import com.fasterxml.jackson.core.JsonProcessingException;
21import com.fasterxml.jackson.databind.ObjectMapper;
22
23import tudelft.utilities.junit.GeneralTests;
24
25public class DomainTest extends GeneralTests<Domain> {
26 private static final DiscreteValue I1V2 = new DiscreteValue("i1v2");
27 private static final DiscreteValue I1V1 = new DiscreteValue("i1v1");
28 private static final String DOMAINNAME = "testdomain";
29 private static final String ISSUE1 = "issue1";
30 private static final String ISSUE2 = "issue2";
31 private static final String ISSUE3 = "issue3";
32 private static final ObjectMapper jackson = new ObjectMapper();
33 private static final String domainstring = "{\"name\":\"testdomain\",\"issuesValues\":{\"issue2\":{\"range\":[2,3,0.22]},\"issue1\":{\"values\":[\"i1v1\",\"i1v2\"]}}}";
34
35 private static final String jobsstring = "{\"name\":\"jobs\"," + "\"issuesValues\":{"
36 + "\"lease car\":{\"values\":[\"yes\",\"no\"]}," + "\"permanent contract\":{\"values\":[\"yes\",\"no\"]},"
37 + "\"career development opportunities\":{\"values\":[\"low\",\"medium\",\"high\"]},"
38 + "\"fte\":{\"values\":[\"0.6\",\"0.8\",\"1.0\"]},"
39 + "\"salary\":{\"values\":[\"2000\",\"2500\",\"3000\",\"3500\",\"4000\"]},"
40 + "\"work from home\":{\"values\":[\"0\",\"1\",\"2\"]}}}";
41
42 private static final Map<String, ValueSet> issues = new HashMap<>();
43 private static final ValueSet values1;
44 private static final ValueSet values2;
45 private static final BigDecimal TWO = new BigDecimal("2");
46 private static final BigDecimal THREE = new BigDecimal("3");
47
48 private static final Domain domain, domain1, domain2, domain3;
49
50 static {
51 Collection<DiscreteValue> discretevalues1 = new LinkedList<>();
52 discretevalues1.add(I1V1);
53 discretevalues1.add(I1V2);
54 values1 = new DiscreteValueSet(discretevalues1);
55 issues.put(ISSUE1, values1);
56
57 values2 = new NumberValueSet(TWO, THREE, new BigDecimal("0.22"));
58 issues.put(ISSUE2, values2);
59
60 domain = new Domain(DOMAINNAME, issues);
61 domain1 = new Domain(DOMAINNAME, issues);
62 domain2 = new Domain(DOMAINNAME + "1", issues);
63
64 Map<String, ValueSet> issues1 = new HashMap<>();
65 issues1.put(ISSUE1, values1);
66 issues1.put(ISSUE2, new NumberValueSet(BigDecimal.ONE, TWO, new BigDecimal("0.22")));
67 domain3 = new Domain(DOMAINNAME, issues1);
68
69 }
70
71 @Override
72 public List<List<Domain>> getGeneralTestData() {
73 return Arrays.asList(Arrays.asList(domain, domain1), Arrays.asList(domain2), Arrays.asList(domain3));
74 }
75
76 @Override
77 public List<String> getGeneralTestStrings() {
78 return Arrays.asList("Domain.*testdomain.*", "Domain.*testdomain1.*", "Domain.*testdomain.*");
79 }
80
81 @Test
82 public void SerializeTest() throws JsonProcessingException {
83 System.out.println(jackson.writeValueAsString(domain));
84 assertEquals(domainstring, jackson.writeValueAsString(domain));
85
86 }
87
88 @Test
89 public void DeSerializeTest() throws IOException {
90 System.out.println(domainstring);
91 assertEquals(domain, jackson.readValue(domainstring, Domain.class));
92
93 }
94
95 @Test
96 public void DeSerializeJobsTest() throws IOException {
97 System.out.println(jobsstring);
98 Domain jobsdomain = jackson.readValue(jobsstring, Domain.class);
99 assertEquals(new HashSet<>(Arrays.asList("lease car", "permanent contract", "career development opportunities",
100 "fte", "salary", "work from home")), jobsdomain.getIssues());
101
102 }
103
104 @Test
105 public void getIssuesTest() {
106 assertEquals(issues.keySet(), domain.getIssues());
107 }
108
109 @Test
110 public void getValuesTest() {
111 assertEquals(values1, domain.getValues(ISSUE1));
112 assertEquals(values2, domain.getValues(ISSUE2));
113 }
114
115 @Test
116 public void getNameTest() {
117 assertEquals(DOMAINNAME, domain.getName());
118 }
119
120 @Test
121 public void testIsCompleteNoIssuesDefined() {
122 Bid bid = mock(Bid.class);
123 assertThat(domain.isComplete(bid), new PatternMatch("Issues in bid .* do not match issues in domain .*"));
124 }
125
126 @Test
127 public void testIsComplete() {
128 Bid bid = mock(Bid.class);
129 when(bid.getIssues()).thenReturn(issues.keySet());
130 when(bid.getValue(ISSUE1)).thenReturn(I1V2);
131 when(bid.getValue(ISSUE2)).thenReturn(new NumberValue(TWO));
132 assertEquals(null, domain.isComplete(bid));
133 }
134
135 @Test
136 public void testIsCompleteWrongNumberValue() {
137 Bid bid = mock(Bid.class);
138 when(bid.getIssues()).thenReturn(issues.keySet());
139 when(bid.getValue(ISSUE1)).thenReturn(I1V2);
140 // THREE is NOT a possible value in the NumberValueSet.
141 when(bid.getValue(ISSUE2)).thenReturn(new NumberValue(THREE));
142 assertThat(domain.isComplete(bid), new PatternMatch("bid issue issue2 has illegal value 3"));
143 }
144
145 @Test
146 public void testIsCompleteExtraIssue() {
147 Bid bid = mock(Bid.class);
148 HashMap extraissues = new HashMap<>(issues);
149 extraissues.put(ISSUE3, values1);
150 when(bid.getIssues()).thenReturn(extraissues.keySet());
151 when(bid.getValue(ISSUE1)).thenReturn(I1V2);
152 // THREE is NOT a possible value in the NumberValueSet.
153 when(bid.getValue(ISSUE2)).thenReturn(new NumberValue(THREE));
154 assertThat(domain.isComplete(bid), new PatternMatch("Issues in bid .* do not match issues in domain .*"));
155 }
156
157 @Test(expected = IllegalArgumentException.class)
158 public void testBadName1() {
159 new Domain("($@#", issues);
160 }
161
162 @Test(expected = IllegalArgumentException.class)
163 public void testEmptyName() {
164 new Domain("", issues);
165 }
166
167}
Note: See TracBrowser for help on using the repository browser.