diff --git a/src/main/java/io/github/jetkai/openai/openai/OpenAIImpl.java b/src/main/java/io/github/jetkai/openai/openai/OpenAIImpl.java index ccdfc49..4e49cb5 100644 --- a/src/main/java/io/github/jetkai/openai/openai/OpenAIImpl.java +++ b/src/main/java/io/github/jetkai/openai/openai/OpenAIImpl.java @@ -30,6 +30,7 @@ */ final class OpenAIImpl extends OpenAI { + private final boolean isTesting = Objects.equals(System.getProperty("is.testing"), "true"); private final HttpClient httpClient; private final HttpClientInstance httpClientInstance; private final String apiKey; @@ -105,15 +106,15 @@ public T createInstance(Class clazz, Object data) { return (T) this; } try { - Class superClazz = data.getClass().getSuperclass(); - Class dataClazz = superClazz == Object.class ? data.getClass() : superClazz; - T instance = clazz.getConstructor(dataClazz).newInstance(data); + T instance = data != null + ? clazz.getConstructor(data.getClass().getSuperclass() == Object.class + ? data.getClass() : data.getClass().getSuperclass()).newInstance(data) + : clazz.getConstructor().newInstance(); if (instance instanceof OAPI) { ((OAPI) instance).setOpenAI(this).initialize(); } return instance; - } catch (InstantiationException | IllegalAccessException - | InvocationTargetException | NoSuchMethodException e) { + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { throw new RuntimeException(e); } } @@ -129,6 +130,9 @@ public T createInstance(OpenAIEndpoints endpoint, Object data) { instance = new ListModel(String.valueOf(data)); break; case LIST_MODELS: + if(isTesting && data == null) { + throw new IllegalArgumentException("Data can not be null (when testing)"); + } instance = new ListModels(); break; case CREATE_CHAT_COMPLETION: @@ -194,7 +198,9 @@ public T createInstance(OpenAIEndpoints endpoint, Object data) { default: throw new IllegalArgumentException("Endpoint not handled: " + endpoint); } - instance.setOpenAI(this).initialize(); + if(!isTesting) { + instance.setOpenAI(this).initialize(); + } return (T) instance; } diff --git a/src/test/java/CreateCompletionTest.java b/src/test/java/CreateCompletionTest.java index 244b0a8..99847dd 100644 --- a/src/test/java/CreateCompletionTest.java +++ b/src/test/java/CreateCompletionTest.java @@ -4,8 +4,6 @@ import io.github.jetkai.openai.openai.OpenAI; import org.junit.jupiter.api.Test; -import java.util.Optional; - import static org.junit.jupiter.api.Assertions.*; /** @@ -90,31 +88,28 @@ void createCompletionTest() { .build() .sendRequest(); - assertNotNull(openAI); + assertNotNull(openAI, "OpenAI not found"); //Call the CreateCompletion API from OpenAI & create instance - Optional optionalCreateCompletion = openAI.completion(); - assertFalse(optionalCreateCompletion.isEmpty()); - - //Additionally check the getter method is not null - assertNotNull(openAI.getCompletion()); - - CreateCompletion createCompletion = optionalCreateCompletion.get(); - - assertNotNull(createCompletion.asStringArray()); - assertNotNull(createCompletion.asSentences()); - assertNotNull(createCompletion.asNormalizedSentences(2048)); - assertNotNull(createCompletion.asNormalizedSentences(1)); - assertNotNull(createCompletion.asText()); + CreateCompletion createCompletion = openAI.completion().orElseThrow(() -> + new AssertionError("CreateCompletion object not found")); - //Data structure example + //Additional checks + assertNotNull(openAI.getCompletion(), "CreateCompletion object not found"); CompletionResponseData responseData = createCompletion.asData(); - assertNotNull(responseData); + assertNotNull(responseData, "CompletionResponseData object not found"); + assertNotNull(createCompletion.asStringArray(), "String Array not found"); + assertNotNull(createCompletion.asSentences(), "Sentence List not found"); + assertNotNull(createCompletion.asNormalizedSentences(2048), + "Normalized Sentence List (2048) not found"); + assertNotNull(createCompletion.asNormalizedSentences(1), + "Normalized Sentence List (1) not found"); + assertNotNull(createCompletion.asText(), "Text not found"); //Json example String json = createCompletion.asJson(); - assertNotNull(json); - assertFalse(json.isEmpty()); + assertNotNull(json, "Json not found"); + assertFalse(json.isEmpty(), "Json is empty"); } } diff --git a/src/test/java/CreateInstanceTest.java b/src/test/java/CreateInstanceTest.java index 33d8587..47869c2 100644 --- a/src/test/java/CreateInstanceTest.java +++ b/src/test/java/CreateInstanceTest.java @@ -1,9 +1,11 @@ import io.github.jetkai.openai.api.ListModel; +import io.github.jetkai.openai.api.ListModels; import io.github.jetkai.openai.net.OpenAIEndpoints; import io.github.jetkai.openai.openai.OpenAI; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * CreateInstanceTest @@ -17,6 +19,7 @@ public class CreateInstanceTest { @Test void createInstanceTest() { + System.setProperty("is.testing", "true"); String apiKey = System.getenv("OPEN_AI_API_KEY"); String organization = System.getenv("OPEN_AI_ORGANIZATION"); assertNotNull(apiKey); @@ -32,6 +35,12 @@ void createInstanceTest() { ListModel instance2 = openAI.createInstance(OpenAIEndpoints.LIST_MODEL, "davinci"); assertNotNull(instance2); + + //This test should throw + for(OpenAIEndpoints openAIEndpoints : OpenAIEndpoints.values()) { + assertThrows(IllegalArgumentException.class, ()-> openAI.createInstance(openAIEndpoints, null)); + } + } }