aboutsummaryrefslogtreecommitdiffstats
path: root/utils/src/test/java/org/onap/policy/common/utils/coder/StandardCoderObjectTest.java
blob: 1748aed3e85d482531207bea1e77ad4fbe1ef93d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * ============LICENSE_START=======================================================
 * ONAP
 * ================================================================================
 * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */

package org.onap.policy.common.utils.coder;

import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import org.junit.Before;
import org.junit.Test;

public class StandardCoderObjectTest {
    private static final Gson gson = new Gson();

    private static final String PROP1 = "abc";
    private static final String PROP2 = "ghi";
    private static final Integer PROP2_INDEX = 1;
    private static final String PROP2b = "jkl";
    private static final String VAL1 = "def";
    private static final String VAL2 = "mno";
    private static final String JSON = "{'abc':'def','ghi':[{},{'jkl':'mno'}]}".replace('\'', '"');

    private StandardCoderObject sco;

    /**
     * Creates a standard object, populated with some data.
     *
     * @throws Exception if an error occurs
     */
    @Before
    public void setUp() throws Exception {
        sco = new StandardCoderObject(gson.fromJson(JSON, JsonElement.class));
    }

    @Test
    public void testStandardCoderObject() {
        assertNull(new StandardCoderObject().getData());
    }

    @Test
    public void testStandardCoderObjectJsonElement() {
        assertNotNull(sco.getData());
        assertEquals(JSON, gson.toJson(sco.getData()));
    }

    @Test
    public void testGetString() throws Exception {
        // one field
        assertEquals(VAL1, sco.getString(PROP1));

        // multiple fields
        assertEquals(VAL2, sco.getString(PROP2, PROP2_INDEX, PROP2b));

        // not found
        assertNull(sco.getString("xyz"));

        // read from null object
        assertNull(new StandardCoderObject().getString());
        assertNull(new StandardCoderObject().getString(PROP1));

        JsonElement obj = gson.fromJson("{'abc':[]}".replace('\'', '"'), JsonElement.class);
        sco = new StandardCoderObject(obj);

        // not a primitive
        assertNull(sco.getString(PROP1));

        // not a JSON object
        assertNull(sco.getString(PROP1, PROP2));

        // invalid subscript
        assertThatIllegalArgumentException().isThrownBy(() -> sco.getString(10.0));
    }

    @Test
    public void testGetFieldFromObject() {
        // not an object
        assertNull(sco.getFieldFromObject(fromJson("[]"), PROP1));

        // field doesn't exist
        assertNull(sco.getFieldFromObject(fromJson("{}"), "non-existent"));

        // field exists
        assertEquals(4, sco.getFieldFromObject(fromJson("{\"world\":4}"), "world").getAsInt());
    }

    @Test
    public void testGetItemFromArray() {
        // not an array
        assertNull(sco.getItemFromArray(fromJson("{}"), 0));

        // negative index
        assertThatIllegalArgumentException().isThrownBy(() -> sco.getItemFromArray(fromJson("[]"), -1));

        // index out of bounds
        assertNull(sco.getItemFromArray(fromJson("[5]"), 1));
        assertNull(sco.getItemFromArray(fromJson("[5]"), 2));

        // index exists
        assertEquals(6, sco.getItemFromArray(fromJson("[5,6,7]"), 1).getAsInt());

        // edge case: first and last item
        assertEquals(50, sco.getItemFromArray(fromJson("[50,60,70]"), 0).getAsInt());
        assertEquals(700, sco.getItemFromArray(fromJson("[500,600,700]"), 2).getAsInt());
    }

    private JsonElement fromJson(String json) {
        return gson.fromJson(json, JsonElement.class);
    }
}