package io.github.sskorol.testcases;

import io.github.sskorol.core.DataSupplier;
import io.github.sskorol.data.JsonReader;
import io.github.sskorol.entities.Animal;
import io.github.sskorol.entities.Client;
import io.github.sskorol.entities.JsonUser;
import io.github.sskorol.entities.MissingClient;
import one.util.streamex.StreamEx;
import org.testng.annotations.Test;

import static io.github.sskorol.data.TestDataReader.use;

public class JsonDataSupplierTests {

    @DataSupplier
    public StreamEx<JsonUser> getUsers() {
        return use(JsonReader.class).withTarget(JsonUser.class).read();
    }

    @DataSupplier
    public StreamEx<Client> getClient() {
        return use(JsonReader.class).withTarget(Client.class).read();
    }

    @DataSupplier
    public StreamEx<Animal> getAnimals() {
        return use(JsonReader.class)
            .withTarget(Animal.class)
            .withSource("https://raw.githubusercontent.com/LearnWebCode/json-example/master/animals-1.json")
            .read();
    }

    @DataSupplier
    public StreamEx<MissingClient> getMissingClient() {
        return use(JsonReader.class).withTarget((MissingClient.class)).read();
    }

    @Test(dataProvider = "getUsers")
    public void shouldReadLocalJsonArray(final JsonUser user) {
        // not implemented
    }

    @Test(dataProvider = "getClient")
    public void shouldReadLocalJson(final Client client) {
        // not implemented
    }

    @Test(dataProvider = "getAnimals")
    public void shouldReadRemoteJson(final Animal animal) {
        // not implemented
    }

    @Test(dataProvider = "getMissingClient")
    public void shouldNotBeExecutedWithMissingJsonResource(final MissingClient missingClient) {
        // not implemented
    }
}