Package com.sonyericsson.hudson.plugins.metadata.model.values

Source Code of com.sonyericsson.hudson.plugins.metadata.model.values.TreeNodeMetadataValueTest

/*
*  The MIT License
*
*  Copyright 2011 Sony Ericsson Mobile Communications. All rights reserved.
*  Copyright 2012 Sony Mobile Communications AB. All rights reserved.
*
*  Permission is hereby granted, free of charge, to any person obtaining a copy
*  of this software and associated documentation files (the "Software"), to deal
*  in the Software without restriction, including without limitation the rights
*  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
*  copies of the Software, and to permit persons to whom the Software is
*  furnished to do so, subject to the following conditions:
*
*  The above copyright notice and this permission notice shall be included in
*  all copies or substantial portions of the Software.
*
*  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
*  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
*  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
*  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
*  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
*  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
*  THE SOFTWARE.
*/
package com.sonyericsson.hudson.plugins.metadata.model.values;

import com.sonyericsson.hudson.plugins.metadata.Constants;
import com.sonyericsson.hudson.plugins.metadata.MockUtils;
import com.sonyericsson.hudson.plugins.metadata.model.JsonUtils;
import com.sonyericsson.hudson.plugins.metadata.model.MetadataContainer;
import com.sonyericsson.hudson.plugins.metadata.model.MetadataParent;
import com.sonyericsson.hudson.plugins.metadata.util.ExtensionUtils;
import hudson.model.Hudson;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static com.sonyericsson.hudson.plugins.metadata.model.JsonUtils.CHILDREN;
import static com.sonyericsson.hudson.plugins.metadata.model.JsonUtils.DESCRIPTION;
import static com.sonyericsson.hudson.plugins.metadata.model.JsonUtils.NAME;
import static com.sonyericsson.hudson.plugins.metadata.model.JsonUtils.METADATA_TYPE;
import static com.sonyericsson.hudson.plugins.metadata.model.JsonUtils.VALUE;
import static com.sonyericsson.hudson.plugins.metadata.model.JsonUtils.EXPOSED;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNotSame;
import static junit.framework.Assert.assertSame;
import static junit.framework.Assert.fail;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.mockito.Mockito.mock;


//CS IGNORE MagicNumber FOR NEXT 200 LINES. REASON: TestData

/**
* Tests for {@link TreeNodeMetadataValue}.
*
* @author Robert Sandell <robert.sandell@sonyericsson.com>
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({Hudson.class, ExtensionUtils.class })
public class TreeNodeMetadataValueTest {

    /**
     * Tests {@link com.sonyericsson.hudson.plugins.metadata.model.values.TreeNodeMetadataValue#toJson()}.
     *
     * @throws Exception if so.
     */
    @Test
    public void testToJson() throws Exception {
        Hudson hudson = MockUtils.mockHudson();
        MockUtils.mockMetadataValueDescriptors(hudson);
        String name = "nameTest";
        String description = "descrText";

        String stringName = "stringNameTest";
        String stringDescription = "stringDescrText";
        String stringValue = "Who are you gonna call?!";

        TreeNodeMetadataValue metadataValue = new TreeNodeMetadataValue(name, description);
        StringMetadataValue stringMetadataValue = new StringMetadataValue(stringName, stringDescription,
                stringValue, false);
        metadataValue.addChild(stringMetadataValue);

        JSONObject json = metadataValue.toJson();
        assertEquals(name, json.getString(JsonUtils.NAME));
        assertEquals(description, json.getString(JsonUtils.DESCRIPTION));

        JSONArray array = json.getJSONArray(JsonUtils.CHILDREN);
        assertEquals(1, array.size());
        JSONObject strJson = array.getJSONObject(0);
        assertEquals(stringName, strJson.getString(JsonUtils.NAME));
        assertEquals(stringDescription, strJson.getString(JsonUtils.DESCRIPTION));
        assertEquals(stringValue, strJson.getString(JsonUtils.VALUE));
    }

    /**
     * Tests deserialization from JSON to the correct POJO.
     *
     * @throws Exception if so.
     */
    @Test
    public void testFromJson() throws Exception {
        Hudson hudson = MockUtils.mockHudson();
        MockUtils.mockMetadataValueDescriptors(hudson);
        String name = "nameTest";
        String description = "descrText";
        boolean exposed = true;

        JSONObject json = new JSONObject();
        json.put(NAME, name);
        json.put(DESCRIPTION, description);
        json.put(JsonUtils.METADATA_TYPE, "metadata-tree");
        json.put(EXPOSED, exposed);

        String numberName = "numberNameTest";
        long numberValue = 5;

        JSONObject numberJson = new JSONObject();
        numberJson.put(NAME, numberName);
        numberJson.put(VALUE, numberValue);
        numberJson.put(METADATA_TYPE, "metadata-number");
        numberJson.put(EXPOSED, exposed);

        String stringName = "str";
        String stringValue = "me and by boys were walking on the beach.";
        String stringDescription = "Then we got to see the most beautiful rock.";

        JSONObject stringJson = new JSONObject();
        stringJson.put(NAME, stringName);
        stringJson.put(DESCRIPTION, stringDescription);
        stringJson.put(VALUE, stringValue);
        stringJson.put(METADATA_TYPE, "metadata-string");
        stringJson.put(EXPOSED, exposed);

        String nodeName = "layer2";

        JSONObject nodeJson = new JSONObject();
        nodeJson.put(NAME, nodeName);
        nodeJson.put(METADATA_TYPE, "metadata-tree");
        JSONArray nodeChildren = new JSONArray();
        nodeChildren.add(stringJson);
        nodeJson.put(CHILDREN, nodeChildren);
        nodeJson.put(EXPOSED, exposed);

        JSONArray children = new JSONArray();
        children.add(numberJson);
        children.add(stringJson);
        children.add(nodeJson);

        json.put(CHILDREN, children);

        TreeNodeMetadataValue metadataValue = (TreeNodeMetadataValue)JsonUtils.toValue(json,
                mock(MetadataContainer.class));
        assertNotNull(metadataValue);
        assertEquals(name, metadataValue.getName());
        assertEquals(description, metadataValue.getDescription());

        for (MetadataValue value : metadataValue.getChildren()) {
            if (value instanceof NumberMetadataValue) {
                assertEquals(numberName, value.getName());
                assertEquals(numberValue, value.getValue());
                assertEquals(name + Constants.DISPLAY_NAME_SEPARATOR + numberName,
                        ((NumberMetadataValue)value).getFullName());
            } else if (value instanceof StringMetadataValue) {
                assertEquals(stringName, value.getName());
                assertEquals(stringValue, value.getValue());
                assertEquals(stringDescription, value.getDescription());
                assertEquals(name + Constants.DISPLAY_NAME_SEPARATOR + stringName,
                        ((StringMetadataValue)value).getFullName());
            } else if (value instanceof TreeNodeMetadataValue) {
                assertEquals(nodeName, value.getName());
                assertEquals(name + Constants.DISPLAY_NAME_SEPARATOR + nodeName,
                        ((TreeNodeMetadataValue)value).getFullName());
                StringMetadataValue child = (StringMetadataValue)((TreeNodeMetadataValue)value).getChild(stringName);
                assertNotNull(child);
                assertEquals(name + Constants.DISPLAY_NAME_SEPARATOR + nodeName
                        + Constants.DISPLAY_NAME_SEPARATOR + stringName,
                        child.getFullName());
            } else {
                fail("Unexpected metadata type: " + value.getClass().getName());
            }
        }
    }

    /**
     *  Tests
     *  {@link TreeNodeMetadataValue#getFullNameFrom(com.sonyericsson.hudson.plugins.metadata.model.MetadataParent)}.
     */
    @Test
    public void testGetFullNameFrom() {
        final String expected = "3.4";

        TreeNodeMetadataValue[] path = TreeStructureUtil.createTreePath("Test", "root", "1", "2", "3", "4");
        MetadataParent<MetadataValue> path1 =
                (MetadataParent<MetadataValue>)TreeStructureUtil.getPath(path[0], "1", "2");

        assertEquals(expected, path[1].getFullNameFrom(path1));
    }

    /**
     * Tests the cloning functionality of a TreeNodeMetaDataValue.
     * Makes sure that no shallow copying occurs.
     * @throws Exception if so.
     */
    @Test
    public void testClone() throws Exception {
        TreeNodeMetadataValue originalTreeValue = new TreeNodeMetadataValue("TreeOne", "");
        originalTreeValue.addChild(new StringMetadataValue("StringOne", "", "StringValueOne"));
        TreeNodeMetadataValue clonedTreeValue = originalTreeValue.clone();
        StringMetadataValue originalStringValue = (StringMetadataValue)originalTreeValue.getChild("StringOne");
        StringMetadataValue clonedStringValue = (StringMetadataValue)clonedTreeValue.getChild("StringOne");

        assertNotSame(originalTreeValue, clonedTreeValue);
        assertNotSame(originalStringValue, clonedStringValue);
        assertEquals(originalStringValue.getValue(), clonedStringValue.getValue());
        assertSame(originalStringValue.getParent(), originalTreeValue);
        assertSame(clonedStringValue.getParent(), clonedTreeValue);
    }

    /**
     * Tests that the equals method works in the intended way.
     * @throws Exception if so.
     */
    @Test
    public void testEquals() throws Exception {
        TreeNodeMetadataValue first = new TreeNodeMetadataValue("TreeOne", "");
        TreeStructureUtil.addValue(first, "subvalue", "subdescription", "subtree", "subname");

        TreeNodeMetadataValue clone = first.clone();
        assertThat(first, equalTo(clone));

        StringMetadataValue stringMetadataValue = new StringMetadataValue("thatname", "thisdescription", "thevalue");
        first.addChild(stringMetadataValue);
        clone.addChild(stringMetadataValue);
        assertThat(first, equalTo(clone));

        clone.addChild(new StringMetadataValue("othername", "otherdescr", "othervalue"));
        assertThat(first, not(clone));

        first.addChild(new StringMetadataValue("yetanothername", "anddescription", "evenvalue"));
        assertThat(first, not(clone));
    }

    /**
     * Tests that the equals method works in the intended way.
     * @throws Exception if so.
     */
    @Test
    public void testEqualsSameNameDifferentValue() throws Exception {
        TreeNodeMetadataValue first = new TreeNodeMetadataValue("TreeOne", "");
        TreeNodeMetadataValue clone = first.clone();
        first.addChild(new StringMetadataValue("somename", "somedescr", "somevalue"));
        clone.addChild(new NumberMetadataValue("somename", "somedescr", 0));
        assertThat(first, not(clone));
    }
}
TOP

Related Classes of com.sonyericsson.hudson.plugins.metadata.model.values.TreeNodeMetadataValueTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.