Skip to content

Commit 8d0f5ee

Browse files
Removes Map from RecaptchaEnterpriseAppCheckProviderFactory
1 parent 1f56a6a commit 8d0f5ee

File tree

2 files changed

+54
-31
lines changed

2 files changed

+54
-31
lines changed

appcheck/firebase-appcheck-recaptchaenterprise/src/main/java/com/google/firebase/appcheck/recaptchaenterprise/RecaptchaEnterpriseAppCheckProviderFactory.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,14 @@
2121
import com.google.firebase.appcheck.FirebaseAppCheck;
2222
import com.google.firebase.appcheck.recaptchaenterprise.internal.ProviderMultiResourceComponent;
2323
import com.google.firebase.appcheck.recaptchaenterprise.internal.RecaptchaEnterpriseAppCheckProvider;
24-
import java.util.Map;
25-
import java.util.concurrent.ConcurrentHashMap;
24+
import java.util.Objects;
2625

2726
/**
2827
* Implementation of an {@link AppCheckProviderFactory} that builds <br>
2928
* {@link RecaptchaEnterpriseAppCheckProvider}s. This is the default implementation.
3029
*/
3130
public class RecaptchaEnterpriseAppCheckProviderFactory implements AppCheckProviderFactory {
3231

33-
private static final Map<String, RecaptchaEnterpriseAppCheckProviderFactory> factoryInstances =
34-
new ConcurrentHashMap<>();
3532
private final String siteKey;
3633
private volatile RecaptchaEnterpriseAppCheckProvider provider;
3734

@@ -42,17 +39,8 @@ private RecaptchaEnterpriseAppCheckProviderFactory(@NonNull String siteKey) {
4239
/** Gets an instance of this class for installation into a {@link FirebaseAppCheck} instance. */
4340
@NonNull
4441
public static RecaptchaEnterpriseAppCheckProviderFactory getInstance(@NonNull String siteKey) {
45-
RecaptchaEnterpriseAppCheckProviderFactory factory = factoryInstances.get(siteKey);
46-
if (factory == null) {
47-
synchronized (factoryInstances) {
48-
factory = factoryInstances.get(siteKey);
49-
if (factory == null) {
50-
factory = new RecaptchaEnterpriseAppCheckProviderFactory(siteKey);
51-
factoryInstances.put(siteKey, factory);
52-
}
53-
}
54-
}
55-
return factory;
42+
Objects.requireNonNull(siteKey, "siteKey cannot be null");
43+
return new RecaptchaEnterpriseAppCheckProviderFactory(siteKey);
5644
}
5745

5846
@NonNull

appcheck/firebase-appcheck-recaptchaenterprise/src/test/java/com/google/firebase/appcheck/recaptchaenterprise/RecaptchaEnterpriseAppCheckProviderFactoryTest.java

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,37 +14,72 @@
1414

1515
package com.google.firebase.appcheck.recaptchaenterprise;
1616

17-
import static com.google.common.truth.Truth.assertThat;
17+
import static org.junit.Assert.assertEquals;
18+
import static org.junit.Assert.assertNotNull;
19+
import static org.junit.Assert.assertThrows;
20+
import static org.mockito.ArgumentMatchers.anyString;
21+
import static org.mockito.ArgumentMatchers.eq;
22+
import static org.mockito.Mockito.times;
23+
import static org.mockito.Mockito.verify;
24+
import static org.mockito.Mockito.when;
1825

26+
import com.google.firebase.FirebaseApp;
27+
import com.google.firebase.appcheck.AppCheckProvider;
28+
import com.google.firebase.appcheck.recaptchaenterprise.internal.ProviderMultiResourceComponent;
29+
import com.google.firebase.appcheck.recaptchaenterprise.internal.RecaptchaEnterpriseAppCheckProvider;
30+
31+
import org.junit.Before;
1932
import org.junit.Test;
2033
import org.junit.runner.RunWith;
21-
import org.robolectric.RobolectricTestRunner;
22-
import org.robolectric.annotation.Config;
34+
import org.mockito.Mock;
35+
import org.mockito.junit.MockitoJUnitRunner;
2336

2437
/** Tests for {@link RecaptchaEnterpriseAppCheckProviderFactory}. */
25-
@RunWith(RobolectricTestRunner.class)
26-
@Config(manifest = Config.NONE)
38+
@RunWith(MockitoJUnitRunner.class)
2739
public class RecaptchaEnterpriseAppCheckProviderFactoryTest {
2840
static final String SITE_KEY_1 = "siteKey1";
29-
static final String SITE_KEY_2 = "siteKey2";
41+
42+
@Mock private FirebaseApp mockFirebaseApp;
43+
@Mock private ProviderMultiResourceComponent mockComponent;
44+
@Mock private RecaptchaEnterpriseAppCheckProvider mockProvider;
45+
46+
@Before
47+
public void setUp() {
48+
when(mockFirebaseApp.get(eq(ProviderMultiResourceComponent.class))).thenReturn(mockComponent);
49+
when(mockComponent.get(anyString())).thenReturn(mockProvider);
50+
}
3051

3152
@Test
32-
public void testGetInstance_callTwiceSameSiteKey_sameInstance() {
33-
RecaptchaEnterpriseAppCheckProviderFactory firstInstance =
34-
RecaptchaEnterpriseAppCheckProviderFactory.getInstance(SITE_KEY_1);
35-
RecaptchaEnterpriseAppCheckProviderFactory secondInstance =
53+
public void getInstance_nonNullSiteKey_returnsNonNullInstance() {
54+
RecaptchaEnterpriseAppCheckProviderFactory factory =
3655
RecaptchaEnterpriseAppCheckProviderFactory.getInstance(SITE_KEY_1);
56+
assertNotNull(factory);
57+
}
3758

38-
assertThat(firstInstance).isEqualTo(secondInstance);
59+
@Test
60+
public void getInstance_nullSiteKey_expectThrows() {
61+
assertThrows(
62+
NullPointerException.class,
63+
() -> RecaptchaEnterpriseAppCheckProviderFactory.getInstance(null));
64+
}
65+
66+
@Test
67+
public void create_nonNullFirebaseApp_returnsRecaptchaEnterpriseAppCheckProvider() {
68+
RecaptchaEnterpriseAppCheckProviderFactory factory =
69+
RecaptchaEnterpriseAppCheckProviderFactory.getInstance(SITE_KEY_1);
70+
AppCheckProvider provider = factory.create(mockFirebaseApp);
71+
assertNotNull(provider);
72+
assertEquals(RecaptchaEnterpriseAppCheckProvider.class, provider.getClass());
3973
}
4074

4175
@Test
42-
public void testGetInstance_callTwiceDifferentSiteKey_differentInstance() {
43-
RecaptchaEnterpriseAppCheckProviderFactory firstInstance =
76+
public void create_callMultipleTimes_providerIsInitializedOnlyOnce() {
77+
RecaptchaEnterpriseAppCheckProviderFactory factory =
4478
RecaptchaEnterpriseAppCheckProviderFactory.getInstance(SITE_KEY_1);
45-
RecaptchaEnterpriseAppCheckProviderFactory secondInstance =
46-
RecaptchaEnterpriseAppCheckProviderFactory.getInstance(SITE_KEY_2);
4779

48-
assertThat(firstInstance).isNotEqualTo(secondInstance);
80+
factory.create(mockFirebaseApp);
81+
factory.create(mockFirebaseApp);
82+
factory.create(mockFirebaseApp);
83+
verify(mockProvider, times(1)).initializeRecaptchaClient();
4984
}
5085
}

0 commit comments

Comments
 (0)