Skip to content

Commit 2e2087b

Browse files
authored
#patch: Issue with Snapshot.parse regex - ERROR: Found orphan snapshots (#177)
1 parent 6e46266 commit 2e2087b

File tree

2 files changed

+97
-1
lines changed

2 files changed

+97
-1
lines changed

java-snapshot-testing-core/src/main/java/au/com/origin/snapshots/Snapshot.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public String getIdentifier() {
2929
}
3030

3131
public static Snapshot parse(String rawText) {
32-
String regex = "^(?<name>.*?)(\\[(?<scenario>.*)\\])?=(?<header>\\{.*?\\})?(?<snapshot>(.*)$)";
32+
String regex =
33+
"^(?<name>.*?)(\\[(?<scenario>[^]]*)])?=(?<header>\\{[^}]*?})?(?<snapshot>(.*)$)";
3334
Pattern p = Pattern.compile(regex, Pattern.DOTALL);
3435
Matcher m = p.matcher(rawText);
3536
boolean found = m.find();
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package au.com.origin.snapshots;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.Assertions.entry;
5+
6+
import org.junit.jupiter.api.Test;
7+
8+
class SnapshotTest {
9+
10+
@Test
11+
public void shouldParseSnapshot() {
12+
Snapshot snapshot =
13+
Snapshot.parse(
14+
Snapshot.builder().name("au.com.origin.snapshots.Test").body("body").build().raw());
15+
assertThat(snapshot.getIdentifier()).isEqualTo("au.com.origin.snapshots.Test");
16+
assertThat(snapshot.getName()).isEqualTo("au.com.origin.snapshots.Test");
17+
assertThat(snapshot.getHeader()).isEmpty();
18+
assertThat(snapshot.getScenario()).isBlank();
19+
assertThat(snapshot.getBody()).isEqualTo("body");
20+
}
21+
22+
@Test
23+
public void shouldParseSnapshotWithHeaders() {
24+
SnapshotHeader header = new SnapshotHeader();
25+
header.put("header1", "value1");
26+
Snapshot snapshot =
27+
Snapshot.parse(
28+
Snapshot.builder()
29+
.name("au.com.origin.snapshots.Test")
30+
.header(header)
31+
.body("body")
32+
.build()
33+
.raw());
34+
assertThat(snapshot.getIdentifier()).isEqualTo("au.com.origin.snapshots.Test");
35+
assertThat(snapshot.getName()).isEqualTo("au.com.origin.snapshots.Test");
36+
assertThat(snapshot.getHeader()).containsExactly(entry("header1", "value1"));
37+
assertThat(snapshot.getScenario()).isBlank();
38+
assertThat(snapshot.getBody()).isEqualTo("body");
39+
}
40+
41+
@Test
42+
public void shouldParseSnapshotWithScenario() {
43+
Snapshot snapshot =
44+
Snapshot.parse(
45+
Snapshot.builder()
46+
.name("au.com.origin.snapshots.Test")
47+
.scenario("scenario")
48+
.body("body")
49+
.build()
50+
.raw());
51+
assertThat(snapshot.getIdentifier()).isEqualTo("au.com.origin.snapshots.Test[scenario]");
52+
assertThat(snapshot.getName()).isEqualTo("au.com.origin.snapshots.Test");
53+
assertThat(snapshot.getHeader()).isEmpty();
54+
assertThat(snapshot.getScenario()).isEqualTo("scenario");
55+
assertThat(snapshot.getBody()).isEqualTo("body");
56+
}
57+
58+
@Test
59+
public void shouldParseSnapshotWithScenarioAndHeaders() {
60+
SnapshotHeader header = new SnapshotHeader();
61+
header.put("header1", "value1");
62+
Snapshot snapshot =
63+
Snapshot.parse(
64+
Snapshot.builder()
65+
.name("au.com.origin.snapshots.Test")
66+
.scenario("scenario")
67+
.header(header)
68+
.body("body")
69+
.build()
70+
.raw());
71+
assertThat(snapshot.getIdentifier()).isEqualTo("au.com.origin.snapshots.Test[scenario]");
72+
assertThat(snapshot.getName()).isEqualTo("au.com.origin.snapshots.Test");
73+
assertThat(snapshot.getHeader()).containsExactly(entry("header1", "value1"));
74+
assertThat(snapshot.getScenario()).isEqualTo("scenario");
75+
assertThat(snapshot.getBody()).isEqualTo("body");
76+
}
77+
78+
@Test
79+
public void
80+
shouldParseSnapshotWithScenarioAndBodyWithSomethingSimilarToAnScenarioToConfuseRegex() {
81+
Snapshot snapshot =
82+
Snapshot.parse(
83+
Snapshot.builder()
84+
.name("au.com.origin.snapshots.Test")
85+
.scenario("scenario")
86+
.body("[xxx]=yyy")
87+
.build()
88+
.raw());
89+
assertThat(snapshot.getIdentifier()).isEqualTo("au.com.origin.snapshots.Test[scenario]");
90+
assertThat(snapshot.getName()).isEqualTo("au.com.origin.snapshots.Test");
91+
assertThat(snapshot.getHeader()).isEmpty();
92+
assertThat(snapshot.getScenario()).isEqualTo("scenario");
93+
assertThat(snapshot.getBody()).isEqualTo("[xxx]=yyy");
94+
}
95+
}

0 commit comments

Comments
 (0)