/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.kisoonlineapp.uc.view;

import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.kisoonlineapp.DefaultMessageResolver;
import org.kisoonlineapp.model.Veranstaltung;
import org.kisoonlineapp.model.VeranstaltungBuilder;
import org.kisoonlineapp.model.mapper.VeranstaltungAnmeldemodusMapper;
import org.kisoonlineapp.model.mapper.VeranstaltungStatusMapper;

/**
 *
 * @author berni
 */
public class VeranstaltungViewTest {

    @BeforeClass
    public static void setUpClass() {
    }

    @AfterClass
    public static void tearDownClass() {
    }

    private VeranstaltungView instance;

    public VeranstaltungViewTest() {
    }

    @Before
    public void setUp() {
        instance = new VeranstaltungView();
        {
            VeranstaltungAnmeldemodusMapper veranstaltungAnmeldemodusMapper = new VeranstaltungAnmeldemodusMapper();
            veranstaltungAnmeldemodusMapper.messageResolver = new DefaultMessageResolver();
            veranstaltungAnmeldemodusMapper.onCreate();
            instance.veranstaltungAnmeldemodusMapper = veranstaltungAnmeldemodusMapper;
        }
        {
            VeranstaltungStatusMapper veranstaltungStatusMapper = new VeranstaltungStatusMapper();
            veranstaltungStatusMapper.messageResolver = new DefaultMessageResolver();
            veranstaltungStatusMapper.onCreate();
            instance.veranstaltungStatusMapper = veranstaltungStatusMapper;
        }
    }

    @After
    public void tearDown() {
    }

    /**
     * Test of formatVeranstaltung method, of class VeranstaltungView.
     */
    @Test
    public void testFormatVeranstaltung() {
        Veranstaltung veranstaltung = null;

        assertEquals("", instance.formatVeranstaltung(veranstaltung));

        veranstaltung = new VeranstaltungBuilder().build();
        assertEquals("", instance.formatVeranstaltung(veranstaltung));

        veranstaltung = new VeranstaltungBuilder().code("Code").name("Name").build();
        assertEquals("Code Name", instance.formatVeranstaltung(veranstaltung));

    }

    /**
     * Test of formatStatusTextAndStyle method, of class VeranstaltungView.
     */
    @Test
    public void testFormatStatusTextAndStyle() {
        Veranstaltung veranstaltung;
        String[] result;
        {
            veranstaltung = new VeranstaltungBuilder().code("Code").name("Name").build();
            assertEquals(Veranstaltung.Status.Buchbar, veranstaltung.getStatus());
            result = instance.formatStatusTextAndStyle(veranstaltung);
            assertEquals("Buchbar", result[0]);
            assertEquals("label label-success", result[1]);
        }

        {
            Object[] params = new Object[]{
                Veranstaltung.Status.Abgesagt, "Abgesagt", "label label-danger",
                Veranstaltung.Status.Buchbar, "Buchbar", "label label-success",
                Veranstaltung.Status.NichtBuchbar, "Nicht buchbar", "label label-danger",
                null, "???", "label label-default"
            };
            for (int i = 0; i < params.length; i += 3) {
                String m = "" + i + ": " + params[i] + ", " + params[i + 1] + ", " + params[i + 2];

                Veranstaltung.Status status = (Veranstaltung.Status) params[i + 0];

                veranstaltung = new VeranstaltungBuilder().code("Code").name("Name").status(status).build();
                assertEquals(m, status, veranstaltung.getStatus());
                result = instance.formatStatusTextAndStyle(veranstaltung);
                assertEquals(m, params[i + 1], result[0]);
                assertEquals(m, params[i + 2], result[1]);
            }
        }
    }

    /**
     * Test of formatAnmeldemodusTextAndStyle method, of class
     * VeranstaltungView.
     */
    @Test
    public void testFormatAnmeldemodusTextAndStyle() {
        Veranstaltung veranstaltung;
        String[] result;
        {
            veranstaltung = new VeranstaltungBuilder().code("Code").name("Name").build();
            assertEquals(Veranstaltung.Anmeldemodus.KindersommerKoordination, veranstaltung.getAnmeldemodus());
            result = instance.formatAnmeldemodusTextAndStyle(veranstaltung);
            assertEquals("Kiso", result[0]);
            assertEquals("label label-primary", result[1]);
        }

        {
            Object[] params = new Object[]{
                Veranstaltung.Anmeldemodus.KindersommerKoordination, "Kiso", "label label-primary",
                Veranstaltung.Anmeldemodus.Grafenwoerth, "Grafenwörth", "label label-default",
                null, "???", "label label-default"
            };
            for (int i = 0; i < params.length; i += 3) {
                String m = "" + i + ": " + params[i] + ", " + params[i + 1] + ", " + params[i + 2];

                Veranstaltung.Anmeldemodus anmeldemodus = (Veranstaltung.Anmeldemodus) params[i + 0];

                veranstaltung = new VeranstaltungBuilder().code("Code").name("Name").anmeldemodus(anmeldemodus).build();
                assertEquals(m, anmeldemodus, veranstaltung.getAnmeldemodus());
                result = instance.formatAnmeldemodusTextAndStyle(veranstaltung);
                assertEquals(m, params[i + 1], result[0]);
                assertEquals(m, params[i + 2], result[1]);
            }
        }
    }

}
