View Javadoc
1   package io.github.magwas.inez.element;
2   
3   import static org.junit.jupiter.api.Assertions.assertEquals;
4   import static org.junit.jupiter.api.Assertions.assertSame;
5   import static org.junit.jupiter.api.Assertions.assertTrue;
6   
7   import java.io.IOException;
8   import java.io.InputStream;
9   import java.util.List;
10  import java.util.stream.Collectors;
11  
12  import org.junit.jupiter.api.BeforeEach;
13  import org.junit.jupiter.api.Tag;
14  import org.junit.jupiter.api.Test;
15  import org.junit.jupiter.api.extension.ExtendWith;
16  import org.springframework.beans.factory.annotation.Autowired;
17  import org.springframework.test.context.ContextConfiguration;
18  import org.springframework.test.context.junit.jupiter.SpringExtension;
19  
20  import io.github.magwas.inez.BridiTestData;
21  import io.github.magwas.inez.InezImpl;
22  import io.github.magwas.inez.TestConfig;
23  import io.github.magwas.inez.storage.repository.BridiReferenceRepository;
24  import io.github.magwas.inez.storage.repository.SumtiRepository;
25  
26  @Tag("end-to-end")
27  @ExtendWith(SpringExtension.class)
28  @ContextConfiguration(classes = TestConfig.class)
29  class BridiElementEndToEndTest implements BridiTestData, BridiElementTestData {
30  
31  	@Autowired
32  	SumtiRepository sumtiRepository;
33  
34  	@Autowired
35  	BridiReferenceRepository bridiReferenceRepository;
36  
37  	@Autowired
38  	BridiElementSystemInitializationService bridiElementSystemInitialization;
39  
40  	@Autowired
41  	InezImpl inez;
42  
43  	@Autowired
44  	BridiElementFactory bridiElementFactory;
45  
46  	@BeforeEach
47  	void setUp() {
48  		sumtiRepository.findAll().forEach(x -> sumtiRepository.delete(x));
49  		bridiReferenceRepository.findAll().forEach(x -> bridiReferenceRepository.delete(x));
50  	}
51  
52  	@Test
53  	void test() throws IOException {
54  		assertSame(inez.getBridiReferenceRepository(), bridiReferenceRepository);
55  		assertSame(bridiElementSystemInitialization.inez, inez);
56  		bridiElementSystemInitialization.apply();
57  		BridiElement elementModel = bridiElementFactory.apply(ELEMENT_MODEL_ID);
58  		assertTrue(elementModel
59  				.getChildren()
60  				.anyMatch(
61  						x -> x.getReferences().map(y -> y.id).toList().contains(ElementConstants.IS_FUNCTION_FOR_ID)));
62  		BridiElement root = bridiElementFactory.apply(ROOT_ID);
63  		String rootXml = loadResourceAsString("root.xml");
64  		String theXml = root.toXml();
65  		assertEquals(rootXml, theXml);
66  		inez.createFromdefinitions("mymodel.definition").toArray();
67  
68  		BridiElement element = bridiElementFactory.apply(CONTAINS_ELEMENT_ID);
69  
70  		assertEquals(CONTAINS_ELEMENT_ID, element.id);
71  		assertEquals(CONTAINS_ELEMENT_REPR, element.getRepresentation());
72  
73  		assertEquals(THING_ID, element.getType().id);
74  		assertEquals(
75  				CONTAINS_ELEMENT_REFERENCES,
76  				element.getReferences().map(x -> x.id).toList());
77  		assertEquals(List.of(), element.getChildren().toList());
78  		assertEquals(MY_MODEL_ID, element.getParent().id);
79  
80  		element = bridiElementFactory.apply(MY_MODEL_ID);
81  
82  		assertEquals(MY_MODEL_ID, element.id);
83  		assertEquals(MY_MODEL_REPR, element.getRepresentation());
84  		assertEquals(FOLDER_ID, element.getType().id);
85  		assertEquals(List.of(), element.getReferences().toList());
86  		assertEquals(MY_FOLDER_CHILDREN, element.getChildren().map(x -> x.id).collect(Collectors.toSet()));
87  		assertEquals(ROOT_ID, element.getParent().id);
88  		String xml = loadResourceAsString("mymodel.xml");
89  		assertEquals(xml, element.toXml());
90  		assertTrue(element.isInstance(CONTAINER_ID));
91  		assertTrue(element.isInstance(FOLDER_ID));
92  		assertTrue(element.isInstance(THING_ID));
93  	}
94  
95  	private String loadResourceAsString(final String definitionName) throws IOException {
96  		ClassLoader classloader = Thread.currentThread().getContextClassLoader();
97  		try (InputStream inputStream = classloader.getResourceAsStream(definitionName)) {
98  			return new String(inputStream.readAllBytes());
99  		}
100 	}
101 }