Skip to content

Commit 14fccea

Browse files
SelindekThomas Turrell-Croft
andauthored
Add scheme validation for all IRI's and IRL's (#180)
Co-authored-by: Thomas Turrell-Croft <tom@berrycloud.co.uk>
1 parent f6fc58a commit 14fccea

File tree

10 files changed

+532
-337
lines changed

10 files changed

+532
-337
lines changed

xapi-model/src/main/java/dev/learning/xapi/model/Account.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.fasterxml.jackson.annotation.JsonInclude;
88
import com.fasterxml.jackson.annotation.JsonInclude.Include;
9+
import dev.learning.xapi.model.validation.constraints.HasScheme;
910
import jakarta.validation.constraints.NotBlank;
1011
import jakarta.validation.constraints.NotNull;
1112
import java.net.URI;
@@ -30,6 +31,7 @@ public class Account {
3031
* The canonical home page for the system the account is on.
3132
*/
3233
@NotNull
34+
@HasScheme
3335
private URI homePage;
3436

3537
/**

xapi-model/src/main/java/dev/learning/xapi/model/Activity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package dev.learning.xapi.model;
66

77
import com.fasterxml.jackson.annotation.JsonMerge;
8+
import dev.learning.xapi.model.validation.constraints.HasScheme;
89
import dev.learning.xapi.model.validation.constraints.ValidActivityDefinition;
910
import jakarta.validation.Valid;
1011
import jakarta.validation.constraints.NotNull;
@@ -34,6 +35,7 @@ public class Activity implements StatementObject, SubStatementObject {
3435
* An identifier for a single unique Activity.
3536
*/
3637
@NotNull
38+
@HasScheme
3739
private URI id;
3840

3941
/**

xapi-model/src/main/java/dev/learning/xapi/model/ActivityDefinition.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,14 @@ public class ActivityDefinition {
5757
/**
5858
* The type of Activity.
5959
*/
60+
@HasScheme
6061
private URI type;
6162

6263
/**
6364
* Resolves to a document with human-readable information about the Activity, which could include
6465
* a way to launch the activity.
6566
*/
67+
@HasScheme
6668
private URI moreInfo;
6769

6870
/**

xapi-model/src/main/java/dev/learning/xapi/model/Actor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.fasterxml.jackson.annotation.JsonSubTypes;
1212
import com.fasterxml.jackson.annotation.JsonTypeInfo;
1313
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
14+
import dev.learning.xapi.model.validation.constraints.HasScheme;
1415
import dev.learning.xapi.model.validation.constraints.Mbox;
1516
import jakarta.validation.Valid;
1617
import java.net.URI;
@@ -63,6 +64,7 @@ public abstract class Actor implements StatementObject, SubStatementObject {
6364
/**
6465
* An openID.
6566
*/
67+
@HasScheme
6668
URI openid;
6769

6870
/**

xapi-model/src/main/java/dev/learning/xapi/model/Attachment.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.fasterxml.jackson.annotation.JsonIgnore;
88
import com.fasterxml.jackson.annotation.JsonInclude;
99
import com.fasterxml.jackson.annotation.JsonInclude.Include;
10+
import dev.learning.xapi.model.validation.constraints.HasScheme;
1011
import jakarta.validation.constraints.NotNull;
1112
import jakarta.validation.valueextraction.Unwrapping;
1213
import java.net.URI;
@@ -37,6 +38,7 @@ public class Attachment {
3738
* Identifies the usage of this Attachment.
3839
*/
3940
@NotNull
41+
@HasScheme
4042
private URI usageType;
4143

4244
/**
@@ -75,6 +77,7 @@ public class Attachment {
7577
* performs DNS lookups when calling equals and hashcode.
7678
* </p>
7779
*/
80+
@HasScheme
7881
private URI fileUrl;
7982

8083
/**

xapi-model/src/test/java/dev/learning/xapi/model/AccountTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,23 @@ void whenValidatingAccountWithEmptyNameThenConstraintViolationsSizeIsOne() {
185185

186186
}
187187

188+
@Test
189+
void whenValidatingAccountWithHomepageWithNoSchemeThenConstraintViolationsSizeIsOne() {
190+
191+
final var account = Account.builder()
192+
193+
.name("Example")
194+
195+
.homePage(URI.create("www.example.com"))
196+
197+
.build();
198+
199+
// When Validating Account With Homepage With No Scheme
200+
final Set<ConstraintViolation<Account>> constraintViolations = validator.validate(account);
201+
202+
// Then ConstraintViolations Size Is One
203+
assertThat(constraintViolations, hasSize(1));
204+
205+
}
206+
188207
}

0 commit comments

Comments
 (0)