-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathHtmxAwareAuthenticationEntryPointConfigurationTest.java
More file actions
94 lines (82 loc) · 4.11 KB
/
HtmxAwareAuthenticationEntryPointConfigurationTest.java
File metadata and controls
94 lines (82 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.digitalsanctuary.spring.user.security;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
@DisplayName("HtmxAwareAuthenticationEntryPointConfiguration Tests")
class HtmxAwareAuthenticationEntryPointConfigurationTest {
// Register as auto-configuration so it is processed after user-defined beans,
// which is required for @ConditionalOnMissingBean to evaluate correctly.
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(HtmxAwareAuthenticationEntryPointConfiguration.class))
.withPropertyValues(
"user.security.loginPageURI=/user/login.html"
);
@Nested
@DisplayName("Non-OAuth2 Configuration")
class NonOAuth2Configuration {
@Test
@DisplayName("Should register HtmxAwareAuthenticationEntryPoint wrapping LoginUrlAuthenticationEntryPoint when OAuth2 disabled")
void shouldRegisterHtmxEntryPointWrappingLoginUrlWhenOAuth2Disabled() {
contextRunner
.withPropertyValues("spring.security.oauth2.enabled=false")
.run(context -> {
assertThat(context).hasSingleBean(AuthenticationEntryPoint.class);
assertThat(context.getBean(AuthenticationEntryPoint.class))
.isInstanceOf(HtmxAwareAuthenticationEntryPoint.class);
});
}
@Test
@DisplayName("Should register HtmxAwareAuthenticationEntryPoint when OAuth2 property absent")
void shouldRegisterHtmxEntryPointWhenOAuth2PropertyAbsent() {
contextRunner.run(context -> {
assertThat(context).hasSingleBean(AuthenticationEntryPoint.class);
assertThat(context.getBean(AuthenticationEntryPoint.class))
.isInstanceOf(HtmxAwareAuthenticationEntryPoint.class);
});
}
}
@Nested
@DisplayName("OAuth2 Configuration")
class OAuth2Configuration {
@Test
@DisplayName("Should register HtmxAwareAuthenticationEntryPoint when OAuth2 enabled")
void shouldRegisterHtmxEntryPointWhenOAuth2Enabled() {
contextRunner
.withPropertyValues("spring.security.oauth2.enabled=true")
.run(context -> {
assertThat(context).hasSingleBean(AuthenticationEntryPoint.class);
assertThat(context.getBean(AuthenticationEntryPoint.class))
.isInstanceOf(HtmxAwareAuthenticationEntryPoint.class);
});
}
}
@Nested
@DisplayName("Consumer Override via @ConditionalOnMissingBean")
class ConsumerOverride {
@Test
@DisplayName("Should not register library bean when consumer provides an AuthenticationEntryPoint")
void shouldNotRegisterLibraryBeanWhenConsumerProvidesEntryPoint() {
contextRunner
.withUserConfiguration(ConsumerEntryPointConfiguration.class)
.run(context -> {
assertThat(context).hasSingleBean(AuthenticationEntryPoint.class);
assertThat(context.getBean(AuthenticationEntryPoint.class))
.isInstanceOf(LoginUrlAuthenticationEntryPoint.class);
});
}
}
@Configuration
static class ConsumerEntryPointConfiguration {
@Bean
public AuthenticationEntryPoint consumerEntryPoint() {
return new LoginUrlAuthenticationEntryPoint("/custom/login");
}
}
}