/*******************************************************************************
 * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 * Roman Grigoriadi
 ******************************************************************************/

package org.eclipse.persistence.json.bind.defaultmapping.specific;

import org.eclipse.persistence.json.bind.internal.JsonBindingBuilder;
import org.eclipse.persistence.json.bind.defaultmapping.specific.model.Customer;
import org.junit.Test;

import javax.json.bind.Jsonb;
import java.util.HashMap;
import java.util.Map;

import static org.junit.Assert.assertEquals;

/**
 * @author Roman Grigoriadi
 */
public class ObjectGraphTest extends CustomerTest {

    private static final String EXPECTED = "{\"addresses\":[{\"street\":{\"name\":\"Zoubkova\",\"number\":111},\"town\":\"Prague\"}],\"age\":33,\"friends\":{\"firstFriend\":{\"addresses\":[{\"street\":{\"name\":\"Zoubkova\",\"number\":111},\"town\":\"Prague\"}],\"age\":33,\"integers\":[0,1],\"listOfListsOfIntegers\":[[0,1,2],[0,1,2],[0,1,2]],\"name\":\"Jasons first friend\",\"stringIntegerMap\":{\"first\":1,\"second\":2},\"strings\":[\"green\",\"yellow\"]},\"secondFriend\":{\"addresses\":[{\"street\":{\"name\":\"Zoubkova\",\"number\":111},\"town\":\"Prague\"}],\"age\":33,\"integers\":[0,1],\"listOfListsOfIntegers\":[[0,1,2],[0,1,2],[0,1,2]],\"name\":\"Jasons second friend\",\"stringIntegerMap\":{\"first\":1,\"second\":2},\"strings\":[\"green\",\"yellow\"]}},\"integers\":[0,1],\"listOfListsOfIntegers\":[[0,1,2],[0,1,2],[0,1,2]],\"name\":\"Root Jason Customer\",\"stringIntegerMap\":{\"first\":1,\"second\":2},\"strings\":[\"green\",\"yellow\"]}";

    @Test
    public void testObjectToJson() {
        Customer customer = createCustomer("Root Jason Customer");

        Map<String, Customer> friends = new HashMap<>();
        friends.put("firstFriend", createCustomer("Jasons first friend"));
        friends.put("secondFriend", createCustomer("Jasons second friend"));
        customer.setFriends(friends);

        Jsonb jsonb = new JsonBindingBuilder().build();
        assertEquals(EXPECTED, jsonb.toJson(customer));
    }

    @Test
    public void testObjectFromJson() {
        Jsonb jsonb = new JsonBindingBuilder().build();
        Customer customer = jsonb.fromJson(EXPECTED, Customer.class);
        assertCustomerValues(customer, "Root Jason Customer");
        assertEquals(2, customer.getFriends().size());
        assertCustomerValues(customer.getFriends().get("firstFriend"), "Jasons first friend");
        assertCustomerValues(customer.getFriends().get("secondFriend"), "Jasons second friend");
    }

}
