| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package com.ruoyi.app.utils.oauth;
- import com.ruoyi.common.constant.CacheConstants;
- import com.ruoyi.common.exception.ServiceException;
- import com.ruoyi.common.utils.MessageUtils;
- import org.junit.jupiter.api.Test;
- import org.mockito.MockedStatic;
- import java.util.Set;
- import static org.junit.jupiter.api.Assertions.assertEquals;
- import static org.junit.jupiter.api.Assertions.assertFalse;
- import static org.junit.jupiter.api.Assertions.assertThrows;
- import static org.junit.jupiter.api.Assertions.assertTrue;
- import static org.mockito.Mockito.mockStatic;
- class LineOAuthPropertiesTest {
- @Test
- void resolvesEachLineProviderToItsOwnChannelAndAccountRole() {
- LineOAuthProperties properties = properties();
- LineOAuthProperties.ResolvedChannel user = properties.requireChannel("line_user");
- assertEquals("user-client", user.clientId());
- assertEquals("https://api.test/auth/line/callback?provider=line_user", user.redirectUri());
- assertEquals(CacheConstants.USER_TOKEN_KEY, user.tokenKey());
- assertEquals(Set.of("0"), user.userTypes());
- assertTrue(user.allowCreate());
- LineOAuthProperties.ResolvedChannel rider = properties.requireChannel("line_rider");
- assertEquals("rider-client", rider.clientId());
- assertEquals(CacheConstants.QS_TOKEN_KEY, rider.tokenKey());
- assertEquals(Set.of("2"), rider.userTypes());
- assertFalse(rider.allowCreate());
- LineOAuthProperties.ResolvedChannel merchant = properties.requireChannel("line_merchant");
- assertEquals("merchant-client", merchant.clientId());
- assertEquals(CacheConstants.SH_APP_TOKEN_KEY, merchant.tokenKey());
- assertEquals(Set.of("1", "3", "4", "5"), merchant.userTypes());
- assertFalse(merchant.allowCreate());
- }
- @Test
- void rejectsLegacyOrUnknownLineProvider() {
- LineOAuthProperties properties = properties();
- try (MockedStatic<MessageUtils> messages = mockStatic(MessageUtils.class)) {
- messages.when(() -> MessageUtils.message(org.mockito.ArgumentMatchers.anyString(),
- org.mockito.ArgumentMatchers.any())).thenReturn("unsupported");
- assertThrows(ServiceException.class, () -> properties.requireChannel("line"));
- assertThrows(ServiceException.class, () -> properties.requireChannel("line_other"));
- }
- }
- @Test
- void rejectsChannelWithMissingSecret() {
- LineOAuthProperties properties = properties();
- properties.getRider().setClientSecret(" ");
- try (MockedStatic<MessageUtils> messages = mockStatic(MessageUtils.class)) {
- messages.when(() -> MessageUtils.message("no.oauth.line.config.invalid"))
- .thenReturn("invalid config");
- assertThrows(ServiceException.class,
- () -> properties.requireChannel("line_rider"));
- }
- }
- private LineOAuthProperties properties() {
- LineOAuthProperties properties = new LineOAuthProperties();
- properties.setUser(channel("user"));
- properties.setRider(channel("rider"));
- properties.setMerchant(channel("merchant"));
- return properties;
- }
- private LineOAuthProperties.Channel channel(String name) {
- LineOAuthProperties.Channel channel = new LineOAuthProperties.Channel();
- channel.setClientId(name + "-client");
- channel.setClientSecret(name + "-secret");
- channel.setRedirectUri("https://api.test/auth/line/callback?provider=line_" + name);
- channel.setAppRedirect("com.test." + name + "://pages/UserCenter/oauthLogin");
- return channel;
- }
- }
|