Project

General

Profile

Download (5.85 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2020 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.api.service;
10

    
11
import java.io.FileNotFoundException;
12
import java.util.ArrayList;
13
import java.util.List;
14
import java.util.UUID;
15

    
16
import org.junit.Assert;
17
import org.junit.Test;
18
import org.unitils.dbunit.annotation.DataSet;
19
import org.unitils.dbunit.annotation.DataSets;
20
import org.unitils.spring.annotation.SpringBeanByType;
21

    
22
import eu.etaxonomy.cdm.model.common.Language;
23
import  eu.etaxonomy.cdm.model.description.Character;
24
import eu.etaxonomy.cdm.model.description.Feature;
25
import eu.etaxonomy.cdm.model.term.DefinedTerm;
26
import eu.etaxonomy.cdm.model.term.Representation;
27
import eu.etaxonomy.cdm.model.term.TermNode;
28
import eu.etaxonomy.cdm.model.term.TermTree;
29
import eu.etaxonomy.cdm.model.term.TermType;
30
import eu.etaxonomy.cdm.persistence.dto.CharacterDto;
31
import eu.etaxonomy.cdm.persistence.dto.CharacterNodeDto;
32
import eu.etaxonomy.cdm.persistence.dto.TermDto;
33
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
34
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
35
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
36
import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
37

    
38
/**
39
 * @author k.luther
40
 * @since Oct 30, 2020
41
 */
42
public class TermNodeServiceImplTest  extends CdmTransactionalIntegrationTest{
43

    
44
    @SpringBeanByType
45
    private ITermNodeService termNodeService;
46

    
47
    @SpringBeanByType
48
    private ITermTreeService termTreeService;
49

    
50
    @SpringBeanByType
51
    private ITermService termService;
52

    
53
    @Test
54
    @DataSets({
55
        @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="/eu/etaxonomy/cdm/database/ClearDB_with_Terms_DataSet.xml"),
56
        @DataSet(value="/eu/etaxonomy/cdm/database/TermsDataSet-with_auditing_info.xml"),
57
    })
58
    public void testSaveCharacterNode_supportedData() {
59
        UUID characterTreeUuid = createAndSaveCharacterTree();
60

    
61
        TermTreeDto dto = termTreeService.getTermTreeDtoByUuid(characterTreeUuid);
62
        List<TermNodeDto> children = dto.getRoot().getChildren();
63
        CharacterNodeDto nodeDto = (CharacterNodeDto) children.get(0);
64
        TermDto termDto = nodeDto.getTerm();
65
        if (termDto instanceof CharacterDto){
66
            CharacterDto characterDto = (CharacterDto) termDto;
67
            characterDto.setSupportsCategoricalData(true);
68
            List<CharacterNodeDto> dtos = new ArrayList<>();
69
            dtos.add(nodeDto);
70
            termNodeService.saveCharacterNodeDtoList(dtos);
71
            commitAndStartNewTransaction();
72
            @SuppressWarnings("unchecked")
73
            TermTree<Feature> characterTree = termTreeService.load(characterTreeUuid);
74
            List<TermNode<Feature>> childNodes = characterTree.getRoot().getChildNodes();
75
            TermNode<Feature> child = childNodes.get(0);
76

    
77
            Assert.assertTrue(child.getTerm().isSupportsCategoricalData());
78

    
79
        }else{
80
            Assert.fail();
81
        }
82
    }
83

    
84
    @Test
85
    public void testSaveCharacterNode_representation() {
86
        UUID characterTreeUuid = createAndSaveCharacterTree();
87

    
88
        TermTreeDto dto = termTreeService.getTermTreeDtoByUuid(characterTreeUuid);
89
        List<TermNodeDto> children = dto.getRoot().getChildren();
90
        CharacterNodeDto nodeDto = (CharacterNodeDto) children.get(0);
91
        TermDto termDto = nodeDto.getTerm();
92
        if (termDto instanceof CharacterDto){
93
            CharacterDto characterDto = (CharacterDto) termDto;
94
            Representation rep = characterDto.getPreferredRepresentation(Language.DEFAULT());
95
            if (rep != null){
96
                rep.setText("Test");
97
            }else{
98
                rep = Representation.NewInstance("Test", "", "", Language.DEFAULT());
99
                characterDto.addRepresentation(rep);
100
            }
101
            List<CharacterNodeDto> dtos = new ArrayList<>();
102
            dtos.add(nodeDto);
103
            termNodeService.saveCharacterNodeDtoList(dtos);
104
            commitAndStartNewTransaction();
105
            @SuppressWarnings("unchecked")
106
            TermTree<Feature> characterTree = termTreeService.load(characterTreeUuid);
107
            List<TermNode<Feature>> childNodes = characterTree.getRoot().getChildNodes();
108
            TermNode<Feature> child = childNodes.get(0);
109

    
110
            Assert.assertTrue(child.getTerm().getPreferredRepresentation(Language.DEFAULT()).getText().equals("Test"));
111

    
112
        }else{
113
            Assert.fail();
114
        }
115
    }
116

    
117
    private UUID createAndSaveCharacterTree() {
118
        DefinedTerm structure = DefinedTerm.NewInstance(TermType.Structure);
119
        TermTree<DefinedTerm> structureTree = TermTree.NewInstance(TermType.Structure);
120
        TermNode<DefinedTerm> nodeStructure = structureTree.getRoot().addChild(structure);
121

    
122
        DefinedTerm property = DefinedTerm.NewInstance(TermType.Property);
123
        TermTree<DefinedTerm> propertyTree = TermTree.NewInstance(TermType.Property);
124
        TermNode<DefinedTerm> nodeProperty = propertyTree.getRoot().addChild(property);
125
        termService.saveOrUpdate(property);
126
        termService.saveOrUpdate(structure);
127
        termTreeService.saveOrUpdate(structureTree);
128
        termTreeService.saveOrUpdate(propertyTree);
129

    
130
        TermTree<Feature> characterTree = TermTree.NewInstance(TermType.Feature);
131
        UUID characterTreeUuid = characterTree.getUuid();
132
        Character character = Character.NewInstance(nodeStructure, nodeProperty);
133
        character.setSupportsCategoricalData(false);
134

    
135
        characterTree.getRoot().addChild(character);
136
        termService.saveOrUpdate(character);
137
        termTreeService.saveOrUpdate(characterTree);
138
        commitAndStartNewTransaction();
139

    
140
        return characterTreeUuid;
141
    }
142

    
143
    @Override
144
    public void createTestDataSet() throws FileNotFoundException {}
145
}
(35-35/40)