package net.onrc.onos.core.intent;

import static org.junit.Assert.assertEquals;

import net.onrc.onos.core.intent.IntentOperation.Operator;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * Unit tests for the IntentOperation class.
 */
public class IntentOperationTest {

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    /**
     * Test the result of executing constructor of the IntentOperation class.
     * This test checks the id field and the operator field.
     */
    @Test
    public void testCreate() {
        IntentOperation op1 = new IntentOperation(Operator.ADD, new Intent("1"));
        IntentOperation op2 = new IntentOperation(Operator.REMOVE, new Intent("2"));
        IntentOperation op3 = new IntentOperation(Operator.ERROR, new Intent("3"));

        assertEquals("1", op1.intent.getId());
        assertEquals(Operator.ADD, op1.operator);
        assertEquals("2", op2.intent.getId());
        assertEquals(Operator.REMOVE, op2.operator);
        assertEquals("3", op3.intent.getId());
        assertEquals(Operator.ERROR, op3.operator);
    }
}
