/*
 * Copyright (c) 2022 Airbyte, Inc., all rights reserved.
 */

package io.airbyte.integrations.destination.s3.avro;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.stream.Stream;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;

public class JsonSchemaTypeTest {

  @ParameterizedTest
  @ArgumentsSource(JsonSchemaTypeProvider.class)
  public void testFromJsonSchemaType(String type, String airbyteType, JsonSchemaType expectedJsonSchemaType) {
    assertEquals(
        expectedJsonSchemaType,
        JsonSchemaType.fromJsonSchemaType(type, airbyteType));
  }

  public static class JsonSchemaTypeProvider implements ArgumentsProvider {

    @Override
    public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception {
      return Stream.of(
          Arguments.of("number", "integer", JsonSchemaType.NUMBER_INT),
          Arguments.of("string", "big_integer", JsonSchemaType.NUMBER_BIGINT),
          Arguments.of("number", "float", JsonSchemaType.NUMBER_FLOAT),
          Arguments.of("number", null, JsonSchemaType.NUMBER),
          Arguments.of("string", null, JsonSchemaType.STRING),
          Arguments.of("integer", null, JsonSchemaType.INTEGER),
          Arguments.of("boolean", null, JsonSchemaType.BOOLEAN),
          Arguments.of("null", null, JsonSchemaType.NULL),
          Arguments.of("object", null, JsonSchemaType.OBJECT),
          Arguments.of("array", null, JsonSchemaType.ARRAY),
          Arguments.of("combined", null, JsonSchemaType.COMBINED));
    }

  }

}
