Skip to content

Commit b5f8c2a

Browse files
chore(rc): Refactor RC integration tests (#507)
* chore(rc): Refactor RC integration tests * Avoid template cloning
1 parent 67926ab commit b5f8c2a

File tree

1 file changed

+120
-46
lines changed

1 file changed

+120
-46
lines changed

src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java

+120-46
Original file line numberDiff line numberDiff line change
@@ -42,89 +42,131 @@ public class FirebaseRemoteConfigIT {
4242

4343
private static FirebaseRemoteConfig remoteConfig;
4444

45-
private static final long timestamp = System.currentTimeMillis();
46-
47-
private static final Map<String, Parameter> PARAMETERS = ImmutableMap.of(
48-
"welcome_message_text", new Parameter()
49-
.setDefaultValue(ParameterValue
50-
.of(String.format("welcome to app %s", timestamp)))
51-
.setConditionalValues(ImmutableMap.<String, ParameterValue>of(
52-
"ios_en",
53-
ParameterValue.of(String.format("welcome to app en %s", timestamp))
54-
))
55-
.setDescription("text for welcome message!"),
56-
"header_text", new Parameter()
57-
.setDefaultValue(ParameterValue.inAppDefault()));
58-
59-
private static final Map<String, ParameterGroup> PARAMETER_GROUPS = ImmutableMap.of(
60-
"new menu", new ParameterGroup()
61-
.setDescription(String.format("New Menu %s", timestamp))
62-
.setParameters(ImmutableMap.of(
63-
"pumpkin_spice_season", new Parameter()
64-
.setDefaultValue(ParameterValue.of("true"))
65-
.setDescription("Whether it's currently pumpkin spice season."))
66-
));
67-
6845
private static final List<Condition> CONDITIONS = ImmutableList.of(
6946
new Condition("ios_en", "device.os == 'ios' && device.country in ['us', 'uk']")
7047
.setTagColor(TagColor.INDIGO),
7148
new Condition("android_en",
7249
"device.os == 'android' && device.country in ['us', 'uk']"));
7350

74-
private static final Version VERSION = Version
75-
.withDescription(String.format("promo config %s", timestamp));
76-
7751
@BeforeClass
7852
public static void setUpClass() {
7953
remoteConfig = FirebaseRemoteConfig.getInstance(IntegrationTestUtils.ensureDefaultApp());
8054
}
8155

8256
@Test
83-
public void testTemplateOperations() throws FirebaseRemoteConfigException {
84-
// get template to fetch the active template with correct etag
85-
final Template oldTemplate = remoteConfig.getTemplate();
86-
final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON());
87-
final String versionNumber = oldTemplate.getVersion().getVersionNumber();
88-
89-
// modify template
90-
inputTemplate.setParameters(PARAMETERS)
91-
.setParameterGroups(PARAMETER_GROUPS)
57+
public void testValidateTemplate() throws FirebaseRemoteConfigException {
58+
final Template inputTemplate = remoteConfig.getTemplate();
59+
final Map<String, Parameter> expectedParameters = getParameters();
60+
final Map<String, ParameterGroup> expectedParameterGroups = getParameterGroups();
61+
final Version expectedVersion = getVersion();
62+
inputTemplate.setParameters(expectedParameters)
63+
.setParameterGroups(expectedParameterGroups)
9264
.setConditions(CONDITIONS)
93-
.setVersion(VERSION);
65+
.setVersion(expectedVersion);
9466

95-
// validate template
9667
Template validatedTemplate = remoteConfig.validateTemplate(inputTemplate);
97-
assertEquals(inputTemplate.getETag(), validatedTemplate.getETag());
98-
assertEquals(PARAMETERS, validatedTemplate.getParameters());
99-
assertEquals(PARAMETER_GROUPS, validatedTemplate.getParameterGroups());
100-
assertEquals(CONDITIONS, validatedTemplate.getConditions());
101-
assertEquals(VERSION, validatedTemplate.getVersion());
68+
69+
assertEquals(inputTemplate, validatedTemplate);
70+
}
71+
72+
@Test
73+
public void testPublishTemplate() throws FirebaseRemoteConfigException {
74+
// get template to fetch the active template with correct etag
75+
final Template inputTemplate = remoteConfig.getTemplate();
76+
final Map<String, Parameter> parameters = getParameters();
77+
final Map<String, ParameterGroup> parameterGroups = getParameterGroups();
78+
final Version version = getVersion();
79+
// modify template
80+
inputTemplate.setParameters(parameters)
81+
.setParameterGroups(parameterGroups)
82+
.setConditions(CONDITIONS)
83+
.setVersion(version);
10284

10385
// publish template
10486
Template publishedTemplate = remoteConfig.publishTemplate(inputTemplate);
87+
10588
assertNotEquals(inputTemplate.getETag(), publishedTemplate.getETag());
106-
assertEquals(PARAMETERS, publishedTemplate.getParameters());
107-
assertEquals(PARAMETER_GROUPS, publishedTemplate.getParameterGroups());
89+
assertEquals(parameters, publishedTemplate.getParameters());
90+
assertEquals(parameterGroups, publishedTemplate.getParameterGroups());
10891
assertEquals(CONDITIONS, publishedTemplate.getConditions());
109-
assertNotEquals(VERSION, publishedTemplate.getVersion());
92+
assertEquals(version.getDescription(), publishedTemplate.getVersion().getDescription());
93+
assertNotEquals(version, publishedTemplate.getVersion());
94+
}
95+
96+
@Test
97+
public void testGetTemplate() throws FirebaseRemoteConfigException {
98+
// get template to fetch the active template with correct etag
99+
// modify and publish a known template to test get template operation.
100+
final Template inputTemplate = remoteConfig.getTemplate();
101+
final Map<String, Parameter> parameters = getParameters();
102+
final Map<String, ParameterGroup> parameterGroups = getParameterGroups();
103+
final Version version = getVersion();
104+
inputTemplate.setParameters(parameters)
105+
.setParameterGroups(parameterGroups)
106+
.setConditions(CONDITIONS)
107+
.setVersion(version);
108+
// publish a known template
109+
Template publishedTemplate = remoteConfig.publishTemplate(inputTemplate);
110110

111111
// get template
112112
Template currentTemplate = remoteConfig.getTemplate();
113+
113114
assertEquals(publishedTemplate, currentTemplate);
115+
}
116+
117+
@Test
118+
public void testGetTemplateAtVersion() throws FirebaseRemoteConfigException {
119+
// get template to fetch the active template with correct etag
120+
// store the template version number
121+
// publish a new template to test get template at version operation.
122+
final Template previousTemplate = remoteConfig.getTemplate();
123+
final String versionNumber = previousTemplate.getVersion().getVersionNumber();
124+
final Template inputTemplate = new Template(previousTemplate.getETag());
125+
final Map<String, Parameter> parameters = getParameters();
126+
final Map<String, ParameterGroup> parameterGroups = getParameterGroups();
127+
final Version version = getVersion();
128+
inputTemplate.setParameters(parameters)
129+
.setParameterGroups(parameterGroups)
130+
.setConditions(CONDITIONS)
131+
.setVersion(version);
132+
// publish a new template
133+
Template publishedTemplate = remoteConfig.publishTemplate(inputTemplate);
114134

115135
// get template at version
116136
Template atVersionTemplate = remoteConfig.getTemplateAtVersion(versionNumber);
117-
assertEquals(oldTemplate, atVersionTemplate);
137+
138+
assertEquals(previousTemplate, atVersionTemplate);
118139
assertEquals(versionNumber, atVersionTemplate.getVersion().getVersionNumber());
140+
assertNotEquals(publishedTemplate, atVersionTemplate);
141+
}
142+
143+
@Test
144+
public void testRollbackTemplate() throws FirebaseRemoteConfigException {
145+
// get template to fetch the active template with correct etag.
146+
// store the template version number to rollback.
147+
final Template inputTemplate = remoteConfig.getTemplate();
148+
final String versionNumber = inputTemplate.getVersion().getVersionNumber();
149+
final Map<String, Parameter> parameters = getParameters();
150+
final Map<String, ParameterGroup> parameterGroups = getParameterGroups();
151+
final Version version = getVersion();
152+
inputTemplate.setParameters(parameters)
153+
.setParameterGroups(parameterGroups)
154+
.setConditions(CONDITIONS)
155+
.setVersion(version);
156+
// publish a new template before rolling back to versionNumber
157+
Template publishedTemplate = remoteConfig.publishTemplate(inputTemplate);
119158

120159
// rollback template
121160
Template rolledBackTemplate = remoteConfig.rollback(versionNumber);
161+
122162
assertEquals(String.format("Rollback to version %s", versionNumber),
123163
rolledBackTemplate.getVersion().getDescription());
124164

125165
// get template to verify rollback
126166
Template activeTemplate = remoteConfig.getTemplate();
167+
127168
assertEquals(rolledBackTemplate, activeTemplate);
169+
assertNotEquals(publishedTemplate, activeTemplate);
128170
}
129171

130172
@Test
@@ -196,4 +238,36 @@ public void onSuccess(ListVersionsPage result) {
196238
assertEquals(versions.size(), collected.get());
197239
assertNull(error.get());
198240
}
241+
242+
private Map<String, Parameter> getParameters() {
243+
final long timestamp = System.currentTimeMillis();
244+
return ImmutableMap.of(
245+
"welcome_message_text", new Parameter()
246+
.setDefaultValue(ParameterValue
247+
.of(String.format("welcome to app %s", timestamp)))
248+
.setConditionalValues(ImmutableMap.<String, ParameterValue>of(
249+
"ios_en",
250+
ParameterValue.of(String.format("welcome to app en %s", timestamp))
251+
))
252+
.setDescription("text for welcome message!"),
253+
"header_text", new Parameter()
254+
.setDefaultValue(ParameterValue.inAppDefault()));
255+
}
256+
257+
private Map<String, ParameterGroup> getParameterGroups() {
258+
final long timestamp = System.currentTimeMillis();
259+
return ImmutableMap.of(
260+
"new menu", new ParameterGroup()
261+
.setDescription(String.format("New Menu %s", timestamp))
262+
.setParameters(ImmutableMap.of(
263+
"pumpkin_spice_season", new Parameter()
264+
.setDefaultValue(ParameterValue.of("true"))
265+
.setDescription("Whether it's currently pumpkin spice season."))
266+
));
267+
}
268+
269+
private Version getVersion() {
270+
final long timestamp = System.currentTimeMillis();
271+
return Version.withDescription(String.format("promo config %s", timestamp));
272+
}
199273
}

0 commit comments

Comments
 (0)