Skip to content

Commit 53feeda

Browse files
committed
feat: Support transient identities and traits
1 parent d206633 commit 53feeda

10 files changed

+132
-69
lines changed

Diff for: lib/src/model/feature.g.dart

+10-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/src/model/flag.g.dart

+9-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/src/model/flags_and_traits.g.dart

+9-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/src/model/identity.dart

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@ part 'identity.g.dart';
66
/// Personalized user
77
@JsonSerializable()
88
class Identity {
9+
@JsonKey(includeIfNull: false)
10+
final bool? transient;
911
final String identifier;
12+
1013
const Identity({
14+
this.transient,
1115
required this.identifier,
1216
});
1317

@@ -16,6 +20,6 @@ class Identity {
1620

1721
Map<String, dynamic> toJson() => _$IdentityToJson(this);
1822
String asString() => jsonEncode(toJson());
19-
Identity copyWith({String? identifier}) =>
20-
Identity(identifier: identifier ?? this.identifier);
23+
Identity copyWith({String? identifier, bool? transient}) =>
24+
Identity(identifier: identifier ?? this.identifier, transient: transient ?? this.transient);
2125
}

Diff for: lib/src/model/identity.g.dart

+17-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/src/model/trait.dart

+3
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@ part 'trait.g.dart';
88
@JsonSerializable()
99
class Trait {
1010
final int? id;
11+
@JsonKey(includeIfNull: false)
12+
final bool? transient;
1113
@JsonKey(name: 'trait_key')
1214
final String key;
1315
@JsonKey(name: 'trait_value', fromJson: _fromJson, toJson: _toJson)
1416
final dynamic value;
1517

1618
Trait({
1719
this.id,
20+
this.transient,
1821
required this.key,
1922
required this.value,
2023
});

Diff for: lib/src/model/trait.g.dart

+27-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: pubspec.yaml

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: >-
33
Core Package of Flutter Client SDK for https://www.flagsmith.com/, Flagsmith is 100% Open
44
Source. Host yourself or let us take care of the hosting.
55
6-
version: 3.0.0
6+
version: 3.1.0
77
homepage: https://github.com/Flagsmith/flagsmith-flutter-core
88
repository: https://github.com/Flagsmith/flagsmith-flutter-core
99
issue_tracker: https://github.com/Flagsmith/flagsmith-flutter-core/issues
@@ -14,13 +14,13 @@ environment:
1414
dependencies:
1515
crypto: ^3.0.1
1616
encrypt: ^5.0.1
17-
rxdart: ^0.27.5
17+
rxdart: ^0.28.0
1818
json_annotation: ^4.0.1
1919
collection: ^1.15.0
2020
dev_dependencies:
21-
flutter_lints: ^1.0.0
22-
test: ">=1.16.0 <=1.17.12"
23-
http_mock_adapter: ^0.3.2
21+
flutter_lints: ^5.0.0
22+
test: ^1.25.8
23+
http_mock_adapter: ^0.6.1
2424
mockito: ^5.0.15
25-
json_serializable: ^4.1.3
25+
json_serializable: ^6.8.0
2626
build_runner: ^2.1.2

Diff for: test/models/identity_test.dart

+10-2
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,30 @@ import 'package:test/test.dart';
66
void main() {
77
const identityId = '123-456-789';
88
const identityJson = r'''{"identifier":"123-456-789"}''';
9+
const transientIdentityJson = r'''{"identifier":"123-456-789","transient":true}''';
910
final decodedIdentityJson = jsonDecode(identityJson) as Map<String, dynamic>;
11+
final decodedTransientIdentityJson = jsonDecode(transientIdentityJson) as Map<String, dynamic>;
1012
// final malformedIdentityJson = '''{"identifier_bad_guy":"$identityId"}''';
1113
group('[Identity]', () {
12-
test('When identy response converted then success', () {
14+
test('When identity response converted then success', () {
1315
final identity = Identity.fromJson(decodedIdentityJson);
1416
expect(identity.identifier, identityId);
1517
});
18+
test('When transient identity response converted then success', () {
19+
final identity = Identity.fromJson(decodedTransientIdentityJson);
20+
expect(identity.identifier, identityId);
21+
expect(identity.transient, true);
22+
});
1623
});
1724

1825
group('[Identity] - copyWith', () {
1926
test('When identity updated then success', () {
2027
final identity = Identity.fromJson(decodedIdentityJson);
2128
expect(identity.identifier, identityId);
2229

23-
final updated = identity.copyWith(identifier: 'newOne');
30+
final updated = identity.copyWith(identifier: 'newOne', transient: true);
2431
expect(updated.identifier, 'newOne');
32+
expect(updated.transient, true);
2533
expect(identity.hashCode, isNot(updated.hashCode));
2634
});
2735
test('When identity not updated then success', () {

Diff for: test/models/trait_test.dart

+35
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ void main() {
3333
}''';
3434
final decodedTraitDoubleValue =
3535
jsonDecode(traitDoubleValue) as Map<String, dynamic>;
36+
const transientTraitValue = '''{
37+
"id": 12,
38+
"trait_key": "trait_key",
39+
"trait_value": "transient",
40+
"transient": true
41+
}''';
42+
final decodedTransientTraitValue =
43+
jsonDecode(transientTraitValue) as Map<String, dynamic>;
3644

3745
group('[Trait] - basic tests', () {
3846
test('When trait parsed then success', () {
@@ -56,6 +64,14 @@ void main() {
5664
});
5765

5866
test('When trait parsed with double value then success', () {
67+
final trait = Trait.fromJson(decodedTransientTraitValue);
68+
expect(trait.id, 12);
69+
expect(trait.key, 'trait_key');
70+
expect(trait.value, 'transient');
71+
expect(trait.transient, true);
72+
});
73+
74+
test('When transient trait parsed then success', () {
5975
final trait = Trait.fromJson(decodedTraitDoubleValue);
6076
expect(trait.id, 12);
6177
expect(trait.key, 'trait_key');
@@ -185,5 +201,24 @@ void main() {
185201
expect(mapped['trait_key'], 'trait_key');
186202
expect(mapped['trait_value'], true);
187203
});
204+
205+
test(
206+
'When transient trait converted to Map<String, dynamic> then success',
207+
() {
208+
final trait = Trait(
209+
id: 12,
210+
key: 'trait_key',
211+
value: 'transient',
212+
transient: true,
213+
);
214+
215+
final mapped = trait.toJson();
216+
217+
expect(mapped, isNotNull);
218+
expect(mapped['id'], 12);
219+
expect(mapped['trait_key'], 'trait_key');
220+
expect(mapped['trait_value'], 'transient');
221+
expect(mapped['transient'], true);
222+
});
188223
});
189224
}

0 commit comments

Comments
 (0)