/********************************************************************************
 * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************/

package org.eclipse.mdm.businessobjects.boundary.integrationtest;

import org.eclipse.mdm.api.base.model.PhysicalDimension;
import org.eclipse.mdm.api.base.model.Quantity;
import org.eclipse.mdm.api.base.model.Unit;
import org.eclipse.mdm.businessobjects.utils.ServiceUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;

/**
 * Test class for QuantityResource.
 * 
 * @author Alexander Nehmer, science+computing AG Tuebingen (Atos SE)
 * @see EntityResourceIntegrationTest
 *
 */
public class QuantityResourceIntegrationTest extends EntityResourceIntegrationTest {

	@BeforeClass
	public static void prepareTestData() {
		getLogger().debug("Preparing QuantityResourceIntegrationTest");

		// prepare test data for creating the Unit
		UnitResourceIntegrationTest.prepareTestData();
		UnitResourceIntegrationTest.createEntity();

		// set up test data
		setContextClass(QuantityResourceIntegrationTest.class);

		putTestDataValue(TESTDATA_RESOURCE_URI, "/quantities");
		putTestDataValue(TESTDATA_ENTITY_NAME, "testQuantity");
		putTestDataValue(TESTDATA_ENTITY_TYPE, "Quantity");

		PhysicalDimension physDim = ENTITY_FACTORY.createPhysicalDimension(getTestDataValue(TESTDATA_ENTITY_NAME));
		Unit unit = ENTITY_FACTORY.createUnit(getTestDataValue(TESTDATA_ENTITY_NAME), physDim);
		ServiceUtils.getCore(unit).setID(getTestDataValue(UnitResourceIntegrationTest.class, TESTDATA_ENTITY_ID));
		Quantity quantity = ENTITY_FACTORY.createQuantity(getTestDataValue(TESTDATA_ENTITY_NAME), unit);

		String json = toJson(quantity);

		putTestDataValue(TESTDATA_CREATE_JSON_BODY, json);
	}

	@AfterClass
	public static void tearDownAfterClass() {
		setContextClass(UnitResourceIntegrationTest.class);
		UnitResourceIntegrationTest.deleteEntity();
	}
}
