1 package org.example.customer.utility;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNotNull;
6 import static org.junit.Assert.assertNull;
7 import static org.junit.Assert.assertTrue;
8 import static org.mockito.ArgumentMatchers.anyString;
9 import static org.mockito.Mockito.when;
10
11 import org.apache.commons.lang3.RandomStringUtils;
12 import org.apache.logging.log4j.Level;
13 import org.apache.logging.log4j.LogManager;
14 import org.apache.logging.log4j.core.config.Configurator;
15 import org.example.websecurity.XssSanitizer;
16 import org.junit.Before;
17 import org.junit.BeforeClass;
18 import org.junit.Test;
19 import org.mockito.Mockito;
20
21 public class PhoneTest
22 {
23
24 private Phone testPhone = null;
25 private XssSanitizer sanitizerMock = null;
26
27 @BeforeClass
28 public static void setup()
29 {
30 Configurator.setLevel(LogManager.getLogger(Phone.class).getName(), Level.WARN);
31 }
32
33 @Before
34 public void setUp() throws Exception
35 {
36 sanitizerMock = Mockito.mock(XssSanitizer.class);
37
38
39 when(sanitizerMock.sanitizeInput(anyString())).thenAnswer(i -> ((String) i.getArguments()[0]).trim());
40
41 testPhone = new Phone(sanitizerMock);
42 }
43
44 @Test
45 public void testPhoneDefaultConstructor()
46 {
47 Phone defaultLocation = new Phone();
48 assertNotNull(defaultLocation);
49 }
50
51 @Test
52 public void testDefaultNumber()
53 {
54 assertNull(testPhone.getNumber());
55 }
56
57 @Test
58 public void testNullNumber()
59 {
60 testPhone.setNumber(null);
61 assertNull(testPhone.getNumber());
62 }
63
64 @Test(expected = IllegalArgumentException.class)
65 public void testEmptyNumber()
66 {
67 testPhone.setNumber(" ");
68 }
69
70 @Test(expected = IllegalArgumentException.class)
71 public void testTooLongNumber()
72 {
73 String bad = RandomStringUtils.randomAlphabetic(31);
74 testPhone.setNumber(bad);
75 }
76
77 @Test(expected = IllegalArgumentException.class)
78 public void testTooShortNumber()
79 {
80 String bad = RandomStringUtils.randomAlphabetic(1);
81 testPhone.setNumber(bad);
82 }
83
84 @Test
85 public void testValidNumber()
86 {
87 String[] values = {"212.555.1212", "(303)555-1212"};
88 for (String value : values)
89 {
90 testPhone.setNumber(value);
91 }
92 }
93
94 @Test
95 public void testSanitizedNumber()
96 {
97 String xssInput = "<script>alert('You have been Hacked!');</script>202.555.1212 ";
98 String xssSanitized = "202.555.1212";
99
100 when(sanitizerMock.sanitizeInput(xssInput)).thenReturn(xssSanitized);
101
102 testPhone.setNumber(xssInput);
103
104
105 String expected = "202.555.1212";
106 String actual = testPhone.getNumber();
107 assertEquals(expected, actual);
108 }
109
110 @Test
111 public void testToString()
112 {
113 String expected = "Phone [Number=null]";
114 String actual = testPhone.toString();
115 assertEquals(expected, actual);
116 }
117
118 @Test public void testHashCode()
119 {
120 Phone sample = new Phone();
121 int expected = sample.hashCode();
122 int actual = testPhone.hashCode();
123 assertEquals(expected, actual);
124 }
125
126 @Test public void testEquals()
127 {
128 Phone sample = new Phone();
129 sample.setNumber("202.555.1212");
130 testPhone.setNumber("202.555.1212");
131 assertTrue(testPhone.equals(sample));
132 }
133
134 @Test public void testNotEquals()
135 {
136 Phone sample = new Phone();
137 sample.setNumber("312.101.3200");
138 assertFalse(testPhone.equals(sample));
139
140 Object junk = new Object();
141 assertFalse(testPhone.equals(junk));
142 }
143
144 }