diff --git a/test/models/environment_models.dart b/test/models/environment_models.dart new file mode 100644 index 00000000..66d61eb3 --- /dev/null +++ b/test/models/environment_models.dart @@ -0,0 +1,145 @@ +import 'package:apidash/consts.dart'; +import 'package:apidash/models/models.dart' + show + EnvironmentModel, + EnvironmentVariableModel, + EnvironmentVariableSuggestion; + +/// Global environment model +const globalEnvironment = EnvironmentModel( + id: kGlobalEnvironmentId, + name: 'Global', + values: [ + EnvironmentVariableModel( + key: 'key1', + value: 'value1', + enabled: true, + ), + EnvironmentVariableModel( + key: 'key2', + value: 'value2', + enabled: false, + ), + ], +); + +/// Basic Environment model with 2 variables +const environmentModel1 = EnvironmentModel( + id: 'environmentId', + name: 'Development', + values: [ + EnvironmentVariableModel( + key: 'key1', + value: 'value1', + type: EnvironmentVariableType.variable, + enabled: true, + ), + EnvironmentVariableModel( + key: 'key2', + value: 'value2', + type: EnvironmentVariableType.variable, + enabled: false, + ), + ], +); + +/// Basic Environment model with 2 secrets +const environmentModel2 = EnvironmentModel( + id: 'environmentId', + name: 'Development', + values: [ + EnvironmentVariableModel( + key: 'key1', + value: 'value1', + type: EnvironmentVariableType.secret, + enabled: true, + ), + EnvironmentVariableModel( + key: 'key2', + value: 'value2', + type: EnvironmentVariableType.secret, + enabled: false, + ), + ], +); + +/// Basic Environment Variable +const environmentVariableModel1 = EnvironmentVariableModel( + key: 'key1', + value: 'value1', + type: EnvironmentVariableType.variable, + enabled: true, +); + +/// Secret Environment Variable +const environmentVariableModel2 = EnvironmentVariableModel( + key: 'key1', + value: 'value1', + type: EnvironmentVariableType.secret, + enabled: true, +); + +/// Basic Environment Variable Suggestion +const environmentVariableSuggestion1 = EnvironmentVariableSuggestion( + environmentId: 'environmentId', + variable: environmentVariableModel1, +); + +/// Secret Environment Variable Suggestion +const environmentVariableSuggestion2 = EnvironmentVariableSuggestion( + environmentId: 'environmentId', + variable: environmentVariableModel2, +); + +/// JSONs +const environmentModel1Json = { + 'id': 'environmentId', + 'name': 'Development', + 'values': [ + { + 'key': 'key1', + 'value': 'value1', + 'type': 'variable', + 'enabled': true, + }, + { + 'key': 'key2', + 'value': 'value2', + 'type': 'variable', + 'enabled': false, + }, + ], +}; + +const environmentModel2Json = { + 'id': 'environmentId', + 'name': 'Development', + 'values': [ + { + 'key': 'key', + 'value': 'value1', + 'type': 'secret', + 'enabled': true, + }, + { + 'key': 'key2', + 'value': 'value2', + 'type': 'secret', + 'enabled': false, + }, + ], +}; + +const environmentVariableModel1Json = { + 'key': 'key1', + 'value': 'value1', + 'type': 'variable', + 'enabled': true, +}; + +const environmentVariableModel2Json = { + 'key': 'key1', + 'value': 'value1', + 'type': 'secret', + 'enabled': true, +}; diff --git a/test/models/environment_models_test.dart b/test/models/environment_models_test.dart new file mode 100644 index 00000000..eb305147 --- /dev/null +++ b/test/models/environment_models_test.dart @@ -0,0 +1,173 @@ +import 'package:test/test.dart'; +import 'package:apidash/models/models.dart'; +import 'package:apidash/consts.dart'; + +import 'environment_models.dart'; + +void main() { + group("Testing EnvironmentModel", () { + test("Testing EnvironmentModel copyWith", () { + var environmentModel = environmentModel1; + final environmentModelcopyWith = + environmentModel.copyWith(name: 'Production'); + expect(environmentModelcopyWith.name, 'Production'); + // original model unchanged + expect(environmentModel.name, 'Development'); + }); + + test("Testing EnvironmentModel toJson", () { + var environmentModel = environmentModel1; + expect(environmentModel.toJson(), environmentModel1Json); + }); + + test("Testing EnvironmentModel fromJson", () { + var environmentModel = environmentModel1; + final modelFromJson = EnvironmentModel.fromJson(environmentModel1Json); + expect(modelFromJson, environmentModel); + expect(modelFromJson.values, const [ + EnvironmentVariableModel( + key: 'key1', + value: 'value1', + type: EnvironmentVariableType.variable, + enabled: true, + ), + EnvironmentVariableModel( + key: 'key2', + value: 'value2', + type: EnvironmentVariableType.variable, + enabled: false, + ), + ]); + }); + + test("Testing EnvironmentModel getters", () { + var environmentModel = environmentModel1; + expect(environmentModel.values, const [ + EnvironmentVariableModel( + key: 'key1', + value: 'value1', + type: EnvironmentVariableType.variable, + enabled: true, + ), + EnvironmentVariableModel( + key: 'key2', + value: 'value2', + type: EnvironmentVariableType.variable, + enabled: false, + ), + ]); + expect(environmentModel.name, 'Development'); + expect(environmentModel.id, 'environmentId'); + }); + + test("Testing EnvironmentModel immutability", () { + var testEnvironmentModel = environmentModel1; + final testEnvironmentModel2 = + testEnvironmentModel.copyWith(values: testEnvironmentModel.values); + expect(testEnvironmentModel2.values, testEnvironmentModel.values); + + expect( + identical(testEnvironmentModel.values, testEnvironmentModel2.values), + false); + var testEnvironmentModel3 = testEnvironmentModel.copyWith(values: []); + expect(testEnvironmentModel3.values, []); + }); + }); + + group("Testing EnvironmentVariableModel", () { + test("Testing EnvironmentVariableModel copyWith", () { + var environmentVariableModel = environmentVariableModel1; + final environmentVariableModelcopyWith = environmentVariableModel + .copyWith(key: 'key3', value: 'value3', enabled: false); + expect(environmentVariableModelcopyWith.key, 'key3'); + expect(environmentVariableModelcopyWith.value, 'value3'); + expect(environmentVariableModelcopyWith.enabled, false); + // original model unchanged + expect(environmentVariableModel.key, 'key1'); + expect(environmentVariableModel.value, 'value1'); + expect(environmentVariableModel.enabled, true); + }); + + test("Testing EnvironmentVariableModel toJson", () { + var environmentVariable = environmentVariableModel1; + expect(environmentVariable.toJson(), environmentVariableModel1Json); + + var environmentSecret = environmentVariableModel2; + expect(environmentSecret.toJson(), environmentVariableModel2Json); + }); + + test("Testing EnvironmentVariableModel fromJson", () { + var environmentVariableModel = environmentVariableModel1; + final modelFromJson = + EnvironmentVariableModel.fromJson(environmentVariableModel1Json); + expect(modelFromJson, environmentVariableModel); + }); + + test("Testing EnvironmentVariableModel getters", () { + var environmentVariableModel = environmentVariableModel1; + expect(environmentVariableModel.key, 'key1'); + expect(environmentVariableModel.value, 'value1'); + expect(environmentVariableModel.enabled, true); + }); + + test("Testing EnvironmentVariableModel immutability", () { + var testEnvironmentVariableModel = environmentVariableModel1; + final testEnvironmentVariableModel2 = + testEnvironmentVariableModel.copyWith(key: 'key2'); + expect(testEnvironmentVariableModel2.key, 'key2'); + expect(testEnvironmentVariableModel2.value, 'value1'); + expect(testEnvironmentVariableModel2.enabled, true); + + expect( + identical( + testEnvironmentVariableModel, testEnvironmentVariableModel2), + false); + }); + }); + + group("Testing EnvironmentVariableSuggestionModel", () { + test("Testing EnvironmentVariableSuggestionModel copyWith", () { + var environmentVariableSuggestionModel = environmentVariableSuggestion1; + final environmentVariableSuggestionModelcopyWith = + environmentVariableSuggestionModel.copyWith( + environmentId: 'environmentId2', + variable: environmentVariableModel2, + isUnknown: true); + expect(environmentVariableSuggestionModelcopyWith.environmentId, + 'environmentId2'); + expect(environmentVariableSuggestionModelcopyWith.variable, + environmentVariableModel2); + expect(environmentVariableSuggestionModelcopyWith.isUnknown, true); + // original model unchanged + expect(environmentVariableSuggestionModel.environmentId, 'environmentId'); + expect(environmentVariableSuggestionModel.variable, + environmentVariableModel1); + expect(environmentVariableSuggestionModel.isUnknown, false); + }); + + test("Testing EnvironmentVariableSuggestionModel immutability", () { + var testEnvironmentVariableSuggestionModel = + environmentVariableSuggestion1; + final testEnvironmentVariableSuggestionModel2 = + testEnvironmentVariableSuggestionModel.copyWith( + environmentId: 'environmentId2', + variable: environmentVariableModel2, + isUnknown: true); + expect(testEnvironmentVariableSuggestionModel2.environmentId, + 'environmentId2'); + expect(testEnvironmentVariableSuggestionModel2.variable, + environmentVariableModel2); + expect(testEnvironmentVariableSuggestionModel2.isUnknown, true); + + expect( + identical(testEnvironmentVariableSuggestionModel, + testEnvironmentVariableSuggestionModel2), + false); + }); + + test("Testing EnvironmentVariableSuggestionModel hashCode", () { + var environmentVariableSuggestionModel = environmentVariableSuggestion1; + expect(environmentVariableSuggestionModel.hashCode, greaterThan(0)); + }); + }); +}