Skip to content
This repository was archived by the owner on Jun 18, 2026. It is now read-only.

Commit 6f830e5

Browse files
Add unit tests for edge class and utility methods
- EdgeTest: 15 tests covering constructors, edge types (f/fs/c/s/sg), weight get/set (zero, negative, large), label get/set/overwrite/null, vertex preservation, special characters, and self-loops - UtilMethodsTest: 10 tests covering findMeetings.getTimeDifference (same time, hour apart, minutes only, with seconds, negative delta, window boundary) and addLocation.getTimeStamp (basic, midnight, end of day, cross-method consistency) Tests target the pure logic functions that don't require a database connection, making them runnable in CI without infrastructure.
1 parent f4f52d0 commit 6f830e5

2 files changed

Lines changed: 259 additions & 0 deletions

File tree

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package app;
2+
3+
import org.junit.Test;
4+
import static org.junit.Assert.*;
5+
6+
/**
7+
* Unit tests for utility / helper methods in the app package.
8+
*
9+
* Tests {@link findMeetings#getTimeDifference(String, String)} and
10+
* {@link addLocation#getTimeStamp(String, String, String)}.
11+
* These are pure functions with no database dependency — ideal for unit testing.
12+
*/
13+
public class UtilMethodsTest {
14+
15+
// ============================================================
16+
// findMeetings.getTimeDifference (time format: "HH.MM:SS.mmm")
17+
// ============================================================
18+
19+
@Test
20+
public void testTimeDifference_sameTime() {
21+
float diff = findMeetings.getTimeDifference("10.30:00.000", "10.30:00.000");
22+
assertEquals(0.0f, diff, 0.01f);
23+
}
24+
25+
@Test
26+
public void testTimeDifference_oneHourApart() {
27+
// 11:30:00 - 10:30:00 = 60 minutes
28+
float diff = findMeetings.getTimeDifference("11.30:00.000", "10.30:00.000");
29+
assertEquals(60.0f, diff, 0.01f);
30+
}
31+
32+
@Test
33+
public void testTimeDifference_minutesOnly() {
34+
// 10:45:00 - 10:30:00 = 15 minutes
35+
float diff = findMeetings.getTimeDifference("10.45:00.000", "10.30:00.000");
36+
assertEquals(15.0f, diff, 0.01f);
37+
}
38+
39+
@Test
40+
public void testTimeDifference_withSeconds() {
41+
// 10:30:30 - 10:30:00 → seconds contribute fractionally
42+
// seconds part: (30 - 0) / 60 = 0.5 minutes
43+
float diff = findMeetings.getTimeDifference("10.30:30.000", "10.30:00.000");
44+
assertEquals(0.5f, diff, 0.01f);
45+
}
46+
47+
@Test
48+
public void testTimeDifference_hoursAndMinutes() {
49+
// 14:15:00 - 12:30:00 = 1h45m = 105 minutes
50+
float diff = findMeetings.getTimeDifference("14.15:00.000", "12.30:00.000");
51+
assertEquals(105.0f, diff, 0.01f);
52+
}
53+
54+
@Test
55+
public void testTimeDifference_negativeWhenEndBeforeStart() {
56+
// If "end" is actually before "start", result is negative
57+
float diff = findMeetings.getTimeDifference("09.00:00.000", "10.00:00.000");
58+
assertTrue("Expected negative difference", diff < 0);
59+
}
60+
61+
// ============================================================
62+
// addLocation.getTimeStamp (builds "YYYY-MM-DD HH:MM:SS.ms")
63+
// ============================================================
64+
65+
@Test
66+
public void testGetTimeStamp_basic() {
67+
String ts = addLocation.getTimeStamp("03", "15", "14.30:45.500");
68+
assertEquals("2011-03-15 14:30:45.500", ts);
69+
}
70+
71+
@Test
72+
public void testGetTimeStamp_midnight() {
73+
String ts = addLocation.getTimeStamp("04", "01", "00.00:00.000");
74+
assertEquals("2011-04-01 00:00:00.000", ts);
75+
}
76+
77+
@Test
78+
public void testGetTimeStamp_endOfDay() {
79+
String ts = addLocation.getTimeStamp("05", "31", "23.59:59.999");
80+
assertEquals("2011-05-31 23:59:59.999", ts);
81+
}
82+
83+
@Test
84+
public void testGetTimeStamp_sameAsFindMeetingsVersion() {
85+
// findMeetings has its own getTimeStamp — verify they produce the same output
86+
String ts1 = addLocation.getTimeStamp("03", "10", "08.15:30.250");
87+
String ts2 = findMeetings.getTimeStamp("03", "10", "08.15:30.250");
88+
assertEquals("Both getTimeStamp implementations should agree", ts1, ts2);
89+
}
90+
91+
// ============================================================
92+
// findMeetings.addMeeting ordering
93+
// ============================================================
94+
95+
@Test
96+
public void testGetTimeDifference_windowBoundary() {
97+
// Exactly 5 minutes — the WINDOW_SIZE boundary
98+
float diff = findMeetings.getTimeDifference("10.35:00.000", "10.30:00.000");
99+
assertEquals(5.0f, diff, 0.01f);
100+
}
101+
102+
@Test
103+
public void testGetTimeDifference_justOverWindow() {
104+
// 5 minutes + 1 second → should exceed the 5.0 window
105+
float diff = findMeetings.getTimeDifference("10.35:01.000", "10.30:00.000");
106+
assertTrue("Should exceed 5.0 minute window",
107+
diff > 5.0f);
108+
}
109+
}

Gvisual/test/gvisual/EdgeTest.java

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package gvisual;
2+
3+
import org.junit.Test;
4+
import static org.junit.Assert.*;
5+
6+
/**
7+
* Unit tests for the {@link edge} class.
8+
*
9+
* Covers constructors, getters, weight/label properties, and
10+
* ensures default (no-arg) construction leaves fields null.
11+
*/
12+
public class EdgeTest {
13+
14+
// --- Constructor tests ---
15+
16+
@Test
17+
public void testDefaultConstructorFieldsAreNull() {
18+
edge e = new edge();
19+
assertNull("type should be null after no-arg construction", e.getType());
20+
assertNull("vertex1 should be null after no-arg construction", e.getVertex1());
21+
assertNull("vertex2 should be null after no-arg construction", e.getVertex2());
22+
assertNull("label should be null by default", e.getLabel());
23+
assertEquals("weight should default to 0.0", 0.0f, e.getWeight(), 0.001f);
24+
}
25+
26+
@Test
27+
public void testParameterizedConstructor() {
28+
edge e = new edge("f", "Alice", "Bob");
29+
assertEquals("f", e.getType());
30+
assertEquals("Alice", e.getVertex1());
31+
assertEquals("Bob", e.getVertex2());
32+
}
33+
34+
// --- Edge type tests ---
35+
36+
@Test
37+
public void testFriendEdgeType() {
38+
edge e = new edge("f", "A", "B");
39+
assertEquals("f", e.getType());
40+
}
41+
42+
@Test
43+
public void testFamiliarStrangerEdgeType() {
44+
edge e = new edge("fs", "A", "B");
45+
assertEquals("fs", e.getType());
46+
}
47+
48+
@Test
49+
public void testClassmateEdgeType() {
50+
edge e = new edge("c", "A", "B");
51+
assertEquals("c", e.getType());
52+
}
53+
54+
@Test
55+
public void testStrangerEdgeType() {
56+
edge e = new edge("s", "A", "B");
57+
assertEquals("s", e.getType());
58+
}
59+
60+
@Test
61+
public void testStudyGroupEdgeType() {
62+
edge e = new edge("sg", "A", "B");
63+
assertEquals("sg", e.getType());
64+
}
65+
66+
// --- Weight tests ---
67+
68+
@Test
69+
public void testSetAndGetWeight() {
70+
edge e = new edge("f", "A", "B");
71+
e.setWeight(42.5f);
72+
assertEquals(42.5f, e.getWeight(), 0.001f);
73+
}
74+
75+
@Test
76+
public void testZeroWeight() {
77+
edge e = new edge("f", "A", "B");
78+
e.setWeight(0.0f);
79+
assertEquals(0.0f, e.getWeight(), 0.001f);
80+
}
81+
82+
@Test
83+
public void testNegativeWeight() {
84+
edge e = new edge("f", "A", "B");
85+
e.setWeight(-10.0f);
86+
assertEquals(-10.0f, e.getWeight(), 0.001f);
87+
}
88+
89+
@Test
90+
public void testLargeWeight() {
91+
edge e = new edge("f", "A", "B");
92+
e.setWeight(999999.99f);
93+
assertEquals(999999.99f, e.getWeight(), 1.0f);
94+
}
95+
96+
// --- Label tests ---
97+
98+
@Test
99+
public void testSetAndGetLabel() {
100+
edge e = new edge("f", "A", "B");
101+
e.setLabel("friend");
102+
assertEquals("friend", e.getLabel());
103+
}
104+
105+
@Test
106+
public void testLabelCanBeOverwritten() {
107+
edge e = new edge("f", "A", "B");
108+
e.setLabel("friend");
109+
e.setLabel("best friend");
110+
assertEquals("best friend", e.getLabel());
111+
}
112+
113+
@Test
114+
public void testLabelCanBeSetToNull() {
115+
edge e = new edge("f", "A", "B");
116+
e.setLabel("friend");
117+
e.setLabel(null);
118+
assertNull(e.getLabel());
119+
}
120+
121+
@Test
122+
public void testEmptyLabel() {
123+
edge e = new edge("f", "A", "B");
124+
e.setLabel("");
125+
assertEquals("", e.getLabel());
126+
}
127+
128+
// --- Vertex tests ---
129+
130+
@Test
131+
public void testVerticesPreserveIds() {
132+
edge e = new edge("c", "node_123", "node_456");
133+
assertEquals("node_123", e.getVertex1());
134+
assertEquals("node_456", e.getVertex2());
135+
}
136+
137+
@Test
138+
public void testVerticesWithSpecialCharacters() {
139+
edge e = new edge("f", "user@domain", "user#2");
140+
assertEquals("user@domain", e.getVertex1());
141+
assertEquals("user#2", e.getVertex2());
142+
}
143+
144+
@Test
145+
public void testSelfLoop() {
146+
// edge class doesn't prevent self-loops — verify it stores them
147+
edge e = new edge("f", "X", "X");
148+
assertEquals(e.getVertex1(), e.getVertex2());
149+
}
150+
}

0 commit comments

Comments
 (0)