• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IQSS / dataverse / #23769

18 Nov 2024 04:04PM CUT coverage: 21.859%. First build
#23769

Pull #11026

github

GPortas
Added: IT cases for updateDataverse API endpoint
Pull Request #11026: Update Dataverse API relations reset when passing null metadata blocks and/or facets and/or input levels

15 of 25 new or added lines in 5 files covered. (60.0%)

18873 of 86338 relevant lines covered (21.86%)

0.22 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.61
/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AbstractWriteDataverseCommand.java
1
package edu.harvard.iq.dataverse.engine.command.impl;
2

3
import edu.harvard.iq.dataverse.*;
4
import edu.harvard.iq.dataverse.engine.command.AbstractCommand;
5
import edu.harvard.iq.dataverse.engine.command.CommandContext;
6
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
7
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
8
import edu.harvard.iq.dataverse.engine.command.exception.IllegalCommandException;
9

10
import java.util.ArrayList;
11
import java.util.List;
12

13
/**
14
 * An abstract base class for commands that perform write operations on {@link Dataverse}s.
15
 */
16
abstract class AbstractWriteDataverseCommand extends AbstractCommand<Dataverse> {
17

18
    protected Dataverse dataverse;
19
    private final List<DataverseFieldTypeInputLevel> inputLevels;
20
    private final List<DatasetFieldType> facets;
21
    protected final List<MetadataBlock> metadataBlocks;
22
    private final boolean resetRelationsOnNullValues;
23

24
    public AbstractWriteDataverseCommand(Dataverse dataverse,
25
                                         Dataverse affectedDataverse,
26
                                         DataverseRequest request,
27
                                         List<DatasetFieldType> facets,
28
                                         List<DataverseFieldTypeInputLevel> inputLevels,
29
                                         List<MetadataBlock> metadataBlocks,
30
                                         boolean resetRelationsOnNullValues) {
31
        super(request, affectedDataverse);
1✔
32
        this.dataverse = dataverse;
1✔
33
        if (facets != null) {
1✔
34
            this.facets = new ArrayList<>(facets);
1✔
35
        } else {
36
            this.facets = null;
1✔
37
        }
38
        if (inputLevels != null) {
1✔
39
            this.inputLevels = new ArrayList<>(inputLevels);
1✔
40
        } else {
41
            this.inputLevels = null;
1✔
42
        }
43
        if (metadataBlocks != null) {
1✔
44
            this.metadataBlocks = new ArrayList<>(metadataBlocks);
×
45
        } else {
46
            this.metadataBlocks = null;
1✔
47
        }
48
        this.resetRelationsOnNullValues = resetRelationsOnNullValues;
1✔
49
    }
1✔
50

51
    @Override
52
    public Dataverse execute(CommandContext ctxt) throws CommandException {
53
        dataverse = innerExecute(ctxt);
1✔
54

55
        processMetadataBlocks();
1✔
56
        processFacets(ctxt);
1✔
57
        processInputLevels(ctxt);
1✔
58

59
        return ctxt.dataverses().save(dataverse);
1✔
60
    }
61

62
    private void processMetadataBlocks() {
63
        if (metadataBlocks != null && !metadataBlocks.isEmpty()) {
1✔
64
            dataverse.setMetadataBlockRoot(true);
×
65
            dataverse.setMetadataBlocks(metadataBlocks);
×
66
        } else if (resetRelationsOnNullValues) {
1✔
NEW
67
            dataverse.setMetadataBlockRoot(false);
×
NEW
68
            dataverse.clearMetadataBlocks();
×
69
        }
70
    }
1✔
71

72
    private void processFacets(CommandContext ctxt) {
73
        if (facets != null) {
1✔
74
            ctxt.facets().deleteFacetsFor(dataverse);
1✔
75

76
            if (!facets.isEmpty()) {
1✔
77
                dataverse.setFacetRoot(true);
1✔
78
            }
79

80
            for (int i = 0; i < facets.size(); i++) {
1✔
81
                ctxt.facets().create(i, facets.get(i), dataverse);
1✔
82
            }
83
        } else if (resetRelationsOnNullValues) {
1✔
NEW
84
            ctxt.facets().deleteFacetsFor(dataverse);
×
NEW
85
            dataverse.setFacetRoot(false);
×
86
        }
87
    }
1✔
88

89
    private void processInputLevels(CommandContext ctxt) {
90
        if (inputLevels != null) {
1✔
91
            if (!inputLevels.isEmpty()) {
1✔
92
                dataverse.addInputLevelsMetadataBlocksIfNotPresent(inputLevels);
1✔
93
            }
94
            ctxt.fieldTypeInputLevels().deleteFacetsFor(dataverse);
1✔
95
            inputLevels.forEach(inputLevel -> {
1✔
96
                inputLevel.setDataverse(dataverse);
1✔
97
                ctxt.fieldTypeInputLevels().create(inputLevel);
1✔
98
            });
1✔
99
        } else if (resetRelationsOnNullValues) {
1✔
NEW
100
            ctxt.fieldTypeInputLevels().deleteFacetsFor(dataverse);
×
101
        }
102
    }
1✔
103

104
    abstract protected Dataverse innerExecute(CommandContext ctxt) throws IllegalCommandException;
105
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc