package net.javacomm.transfer;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;



public class TestTransferOrganizeConferenceCall {

  String encoded;
  ZonedDateTime gregor;

  @BeforeEach
  public void setUp() {
    gregor = ZonedDateTime.of(2022, 8, 18, 15, 30, 0, 0, ZoneId.systemDefault());
    encoded = "{\"KONFERENZNAME\":\"Dienstag Treff\",\"DESCRIPTION\":\"Wir treffen uns jeden Dienstag\",\"PARTICIPANT\":[\"hexe\",\"anaconda\",\"jester\"],\"DUE\":1660829400000}";

  }



  @Test
  public void serialize() {
    TransferOrganizeConferenceCall transfer = new TransferOrganizeConferenceCall();

    transfer.setBeschreibung("Wir treffen uns jeden Dienstag");
    transfer.setKonferenzname("Dienstag Treff");
    List<String> teilnehmer = new ArrayList<>();

    teilnehmer.add("hexe");
    teilnehmer.add("anaconda");
    teilnehmer.add("jester");
    transfer.setTeilnehmer(teilnehmer);

    transfer.setZonedAblaufdatum(gregor);
    assertEquals(encoded, transfer.toString());

  }



  @Test
  public void deserialize() {
    GsonBuilder builder = new GsonBuilder();
    Gson gson = builder.registerTypeAdapter(
        TransferOrganizeConferenceCall.class, new TransferOrganizeConferenceCallDeserializer()
    ).create();
    TransferOrganizeConferenceCall result = gson.fromJson(encoded, TransferOrganizeConferenceCall.class);
    assertEquals("Wir treffen uns jeden Dienstag", result.getBeschreibung());
    assertEquals("Dienstag Treff", result.getKonferenzname());
    List<String> teilnehmer = result.getTeilnehmer();

    assertEquals(teilnehmer.get(0), "hexe");
    assertEquals(teilnehmer.get(teilnehmer.size() - 1), "jester");
    assertTrue(teilnehmer.contains("hexe"));
    assertEquals(gregor, result.getZonedAblaufdatum());
  }

}
