LineOAuthPropertiesTest.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package com.ruoyi.app.utils.oauth;
  2. import com.ruoyi.common.constant.CacheConstants;
  3. import com.ruoyi.common.exception.ServiceException;
  4. import com.ruoyi.common.utils.MessageUtils;
  5. import org.junit.jupiter.api.Test;
  6. import org.mockito.MockedStatic;
  7. import java.util.Set;
  8. import static org.junit.jupiter.api.Assertions.assertEquals;
  9. import static org.junit.jupiter.api.Assertions.assertFalse;
  10. import static org.junit.jupiter.api.Assertions.assertThrows;
  11. import static org.junit.jupiter.api.Assertions.assertTrue;
  12. import static org.mockito.Mockito.mockStatic;
  13. class LineOAuthPropertiesTest {
  14. @Test
  15. void resolvesEachLineProviderToItsOwnChannelAndAccountRole() {
  16. LineOAuthProperties properties = properties();
  17. LineOAuthProperties.ResolvedChannel user = properties.requireChannel("line_user");
  18. assertEquals("user-client", user.clientId());
  19. assertEquals("https://api.test/auth/line/callback?provider=line_user", user.redirectUri());
  20. assertEquals(CacheConstants.USER_TOKEN_KEY, user.tokenKey());
  21. assertEquals(Set.of("0"), user.userTypes());
  22. assertTrue(user.allowCreate());
  23. LineOAuthProperties.ResolvedChannel rider = properties.requireChannel("line_rider");
  24. assertEquals("rider-client", rider.clientId());
  25. assertEquals(CacheConstants.QS_TOKEN_KEY, rider.tokenKey());
  26. assertEquals(Set.of("2"), rider.userTypes());
  27. assertFalse(rider.allowCreate());
  28. LineOAuthProperties.ResolvedChannel merchant = properties.requireChannel("line_merchant");
  29. assertEquals("merchant-client", merchant.clientId());
  30. assertEquals(CacheConstants.SH_APP_TOKEN_KEY, merchant.tokenKey());
  31. assertEquals(Set.of("1", "3", "4", "5"), merchant.userTypes());
  32. assertFalse(merchant.allowCreate());
  33. }
  34. @Test
  35. void rejectsLegacyOrUnknownLineProvider() {
  36. LineOAuthProperties properties = properties();
  37. try (MockedStatic<MessageUtils> messages = mockStatic(MessageUtils.class)) {
  38. messages.when(() -> MessageUtils.message(org.mockito.ArgumentMatchers.anyString(),
  39. org.mockito.ArgumentMatchers.any())).thenReturn("unsupported");
  40. assertThrows(ServiceException.class, () -> properties.requireChannel("line"));
  41. assertThrows(ServiceException.class, () -> properties.requireChannel("line_other"));
  42. }
  43. }
  44. @Test
  45. void rejectsChannelWithMissingSecret() {
  46. LineOAuthProperties properties = properties();
  47. properties.getRider().setClientSecret(" ");
  48. try (MockedStatic<MessageUtils> messages = mockStatic(MessageUtils.class)) {
  49. messages.when(() -> MessageUtils.message("no.oauth.line.config.invalid"))
  50. .thenReturn("invalid config");
  51. assertThrows(ServiceException.class,
  52. () -> properties.requireChannel("line_rider"));
  53. }
  54. }
  55. private LineOAuthProperties properties() {
  56. LineOAuthProperties properties = new LineOAuthProperties();
  57. properties.setUser(channel("user"));
  58. properties.setRider(channel("rider"));
  59. properties.setMerchant(channel("merchant"));
  60. return properties;
  61. }
  62. private LineOAuthProperties.Channel channel(String name) {
  63. LineOAuthProperties.Channel channel = new LineOAuthProperties.Channel();
  64. channel.setClientId(name + "-client");
  65. channel.setClientSecret(name + "-secret");
  66. channel.setRedirectUri("https://api.test/auth/line/callback?provider=line_" + name);
  67. channel.setAppRedirect("com.test." + name + "://pages/UserCenter/oauthLogin");
  68. return channel;
  69. }
  70. }