package dev.openfeature.javasdk; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @SuppressWarnings("unchecked") class DeveloperExperienceTest { transient String flagKey = "mykey"; @Test void simpleBooleanFlag() { OpenFeatureAPI api = OpenFeatureAPI.getInstance(); api.setProvider(new NoOpProvider()); Client client = api.getClient(); Boolean retval = client.getBooleanValue(flagKey, false); assertFalse(retval); } @Test void clientHooks() { Hook exampleHook = (Hook) Mockito.mock(Hook.class); OpenFeatureAPI api = OpenFeatureAPI.getInstance(); api.setProvider(new NoOpProvider()); Client client = api.getClient(); client.addHooks(exampleHook); Boolean retval = client.getBooleanValue(flagKey, false); verify(exampleHook, times(1)).finallyAfter(any(), any()); assertFalse(retval); } @Test void evalHooks() { Hook clientHook = (Hook) Mockito.mock(Hook.class); Hook evalHook = (Hook) Mockito.mock(Hook.class); OpenFeatureAPI api = OpenFeatureAPI.getInstance(); api.setProvider(new NoOpProvider()); Client client = api.getClient(); client.addHooks(clientHook); Boolean retval = client.getBooleanValue(flagKey, false, null, FlagEvaluationOptions.builder().hook(evalHook).build()); verify(clientHook, times(1)).finallyAfter(any(), any()); verify(evalHook, times(1)).finallyAfter(any(), any()); assertFalse(retval); } @Test void brokenProvider() { OpenFeatureAPI api = OpenFeatureAPI.getInstance(); api.setProvider(new AlwaysBrokenProvider()); Client client = api.getClient(); FlagEvaluationDetails retval = client.getBooleanDetails(flagKey, false); assertEquals(ErrorCode.GENERAL, retval.getErrorCode()); assertEquals(Reason.ERROR, retval.getReason()); assertFalse(retval.getValue()); } }