package io.kaif.model.clientapp; import static org.junit.Assert.*; import java.time.Duration; import java.time.Instant; import java.util.EnumSet; import java.util.UUID; import org.junit.Before; import org.junit.Test; import io.kaif.test.ModelFixture; public class GrantCodeTest implements ModelFixture { private OauthSecret secret; @Before public void setUp() throws Exception { secret = new OauthSecret(); secret.setKey("KbKouubC8Zg8P2jsy19SMQ"); secret.setMac("dpLIWEdghZS4XnBsHqHzRQ"); } @Test public void codec() throws Exception { GrantCode code = new GrantCode(UUID.randomUUID(), "cli-id", "sec", "foo://bar", EnumSet.of(ClientAppScope.FEED, ClientAppScope.PUBLIC)); String token = code.encode(Instant.now().plus(Duration.ofHours(1)), secret); assertTrue(token.length() > 100); GrantCode decoded = GrantCode.tryDecode(token, secret).get(); assertEquals(code, decoded); assertFalse(GrantCode.tryDecode("bad", secret).isPresent()); } @Test public void matches() throws Exception { ClientApp app1 = clientApp(accountCitizen("dev1"), "myapp"); ClientApp app2 = clientApp(accountCitizen("dev1"), "myapp2"); GrantCode code = new GrantCode(UUID.randomUUID(), app1.getClientId(), app1.getClientSecret(), "redirect://foo", EnumSet.of(ClientAppScope.ARTICLE)); assertTrue(code.matches(app1, "redirect://foo")); assertFalse(code.matches(app1, "redirect://wrong")); assertFalse(code.matches(app2, "redirect://foo")); } }