Skip to content

Commit 347e4d4

Browse files
committed
add
1 parent 7f02ca9 commit 347e4d4

File tree

4 files changed

+131
-34
lines changed

4 files changed

+131
-34
lines changed

app/src/main/java/hexlet/code/schemas/MapSchema.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,38 +34,30 @@ public boolean isValid(Object value) {
3434
if (value == null) {
3535
return !isRequired;
3636
}
37-
3837
if (!(value instanceof Map)) {
3938
return false;
4039
}
41-
4240
Map<?, ?> map = (Map<?, ?>) value;
43-
4441
if (isRequired && map.isEmpty()) {
4542
return false;
4643
}
47-
4844
if (mapSize != null && map.size() != mapSize) {
4945
return false;
5046
}
51-
5247
for (Map.Entry<String, BaseSchema<?>> entry : shapeSchemas.entrySet()) {
5348
String key = entry.getKey();
5449
BaseSchema<?> schema = entry.getValue();
55-
5650
if (!map.containsKey(key)) {
5751
if (schema instanceof RequiredSchema) {
5852
return false;
5953
}
6054
continue;
6155
}
62-
6356
Object val = map.get(key);
6457
if (!schema.isValid(val)) {
6558
return false;
6659
}
6760
}
68-
6961
return true;
7062
}
7163

app/src/main/java/hexlet/code/schemas/StringSchema.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,19 @@ public boolean isValid(Object value) {
3131
if (value == null) {
3232
return !isRequired;
3333
}
34-
3534
if (!(value instanceof String)) {
3635
return false;
3736
}
38-
3937
String strValue = (String) value;
40-
4138
if (isRequired && strValue.isEmpty()) {
4239
return false;
4340
}
44-
4541
if (strValue.length() < minLength) {
4642
return false;
4743
}
48-
4944
if (contains != null && !strValue.contains(contains)) {
5045
return false;
5146
}
52-
5347
return true;
5448
}
5549
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package hexlet.code;
2+
3+
import hexlet.code.schemas.StringSchema;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
6+
import static org.junit.jupiter.api.Assertions.assertFalse;
7+
import static org.junit.jupiter.api.Assertions.assertTrue;
8+
9+
public class StringSchemaTest {
10+
private Validator validator;
11+
private StringSchema schema;
12+
13+
@BeforeEach
14+
void setUp() {
15+
validator = new Validator();
16+
schema = validator.string();
17+
}
18+
19+
@Test
20+
void testEmptySchema() {
21+
assertTrue(schema.isValid(""));
22+
assertTrue(schema.isValid(null));
23+
}
24+
25+
@Test
26+
void testRequired() {
27+
schema.required();
28+
assertFalse(schema.isValid(null));
29+
assertFalse(schema.isValid(""));
30+
assertTrue(schema.isValid("hexlet"));
31+
}
32+
33+
@Test
34+
void testMinLength() {
35+
schema.minLength(5);
36+
assertFalse(schema.isValid(""));
37+
assertFalse(schema.isValid("test"));
38+
assertTrue(schema.isValid("hello"));
39+
assertTrue(schema.isValid("hexlet"));
40+
}
41+
42+
@Test
43+
void testContains() {
44+
schema.contains("hex");
45+
assertTrue(schema.isValid("hexlet"));
46+
assertTrue(schema.isValid("hexagon"));
47+
assertFalse(schema.isValid("example"));
48+
}
49+
50+
@Test
51+
void testMultipleConstraints() {
52+
schema.required().minLength(5).contains("hex");
53+
assertFalse(schema.isValid(null));
54+
assertFalse(schema.isValid(""));
55+
assertFalse(schema.isValid("test"));
56+
assertTrue(schema.isValid("hexagon"));
57+
assertTrue(schema.isValid("hexlet"));
58+
assertFalse(schema.isValid("hex"));
59+
assertTrue(schema.isValid("hexagonhex"));
60+
}
61+
62+
@Test
63+
void testOverridingConstraints() {
64+
schema.minLength(10).minLength(4);
65+
assertTrue(schema.isValid("Hexlet"));
66+
}
67+
68+
@Test
69+
void testChainingMethods() {
70+
schema.required().minLength(5).contains("hex");
71+
StringSchema schemaChain = validator.string().required().minLength(5).contains("hex");
72+
assertTrue(schemaChain.isValid("hexagon"));
73+
}
74+
75+
@Test
76+
void testNonStringValues() {
77+
schema.required();
78+
assertFalse(schema.isValid(123));
79+
assertFalse(schema.isValid(3.14));
80+
assertFalse(schema.isValid(new Object()));
81+
assertFalse(schema.isValid(new int[]{1, 2, 3}));
82+
assertTrue(schema.isValid("hexlet"));
83+
}
84+
}
Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,83 @@
11
package hexlet.code;
22

3+
import hexlet.code.schemas.MapSchema;
34
import hexlet.code.schemas.StringSchema;
5+
import hexlet.code.schemas.BaseSchema;
46
import org.junit.jupiter.api.BeforeEach;
57
import org.junit.jupiter.api.Test;
6-
8+
import java.util.HashMap;
9+
import java.util.Map;
710
import static org.junit.jupiter.api.Assertions.assertFalse;
811
import static org.junit.jupiter.api.Assertions.assertTrue;
912

1013
public class ValidatorTest {
1114
private Validator validator;
12-
private StringSchema schema;
15+
private StringSchema stringSchema;
1316

1417
@BeforeEach
1518
void setUp() {
1619
validator = new Validator();
17-
schema = validator.string();
20+
stringSchema = validator.string();
1821
}
1922

2023
@Test
2124
void testEmptySchema() {
22-
assertTrue(schema.isValid(""));
23-
assertTrue(schema.isValid(null));
25+
assertTrue(stringSchema.isValid(""));
26+
assertTrue(stringSchema.isValid(null));
2427
}
2528

2629
@Test
2730
void testRequired() {
28-
schema.required();
29-
assertFalse(schema.isValid(null));
30-
assertFalse(schema.isValid(""));
31-
assertTrue(schema.isValid("hexlet"));
31+
stringSchema.required();
32+
assertFalse(stringSchema.isValid(null));
33+
assertFalse(stringSchema.isValid(""));
34+
assertTrue(stringSchema.isValid("hexlet"));
3235
}
3336

3437
@Test
3538
void testMinLength() {
36-
schema.minLength(5);
37-
assertFalse(schema.isValid(""));
38-
assertFalse(schema.isValid("test"));
39-
assertTrue(schema.isValid("hello"));
40-
assertTrue(schema.isValid("hexlet"));
39+
stringSchema.minLength(5);
40+
assertFalse(stringSchema.isValid(""));
41+
assertFalse(stringSchema.isValid("test"));
42+
assertTrue(stringSchema.isValid("hello"));
43+
assertTrue(stringSchema.isValid("hexlet"));
4144
}
4245

4346
@Test
4447
void testContains() {
45-
schema.contains("hex");
46-
assertTrue(schema.isValid("hexlet"));
47-
assertTrue(schema.isValid("hexagon"));
48-
assertFalse(schema.isValid("example"));
48+
stringSchema.contains("hex");
49+
assertTrue(stringSchema.isValid("hexlet"));
50+
assertTrue(stringSchema.isValid("hexagon"));
51+
assertFalse(stringSchema.isValid("example"));
52+
}
53+
54+
@Test
55+
void testMultipleConstraints() {
56+
stringSchema.required().minLength(5).contains("hex");
57+
assertTrue(stringSchema.isValid("hexagon"));
4958
}
5059

5160
@Test
5261
void testOverridingConstraints() {
53-
schema.minLength(10).minLength(4);
54-
assertTrue(schema.isValid("Hexlet"));
62+
stringSchema.minLength(10).minLength(4);
63+
assertTrue(stringSchema.isValid("Hexlet"));
64+
}
65+
66+
@Test
67+
void testShape() {
68+
Map<String, BaseSchema<?>> schemas = new HashMap<>();
69+
schemas.put("firstName", validator.string().required().contains("ya"));
70+
schemas.put("lastName", validator.string().required().contains("ov"));
71+
MapSchema mapSchema = validator.map().shape(schemas);
72+
73+
Map<String, String> person1 = new HashMap<>();
74+
person1.put("firstName", "yana");
75+
person1.put("lastName", "Petrov");
76+
assertTrue(mapSchema.isValid(person1));
77+
78+
Map<String, String> person5 = new HashMap<>();
79+
person5.put("firstName", "yana");
80+
person5.put("lastName", "Petrov");
81+
assertTrue(mapSchema.isValid(person5));
5582
}
5683
}

0 commit comments

Comments
 (0)