summaryrefslogtreecommitdiffstats
path: root/packages/meteor-useraccounts-core/tests/tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meteor-useraccounts-core/tests/tests.js')
-rw-r--r--packages/meteor-useraccounts-core/tests/tests.js215
1 files changed, 215 insertions, 0 deletions
diff --git a/packages/meteor-useraccounts-core/tests/tests.js b/packages/meteor-useraccounts-core/tests/tests.js
new file mode 100644
index 00000000..985200a3
--- /dev/null
+++ b/packages/meteor-useraccounts-core/tests/tests.js
@@ -0,0 +1,215 @@
+Tinytest.add("AccountsTemplates - addField/removeField", function(test) {
+ // Calls after AccountsTemplates.init()
+ AccountsTemplates._initialized = true;
+ test.throws(function() {
+ AccountsTemplates.addField("");
+ }, function(err) {
+ if (err instanceof Error && err.message === "AccountsTemplates.addField should strictly be called before AccountsTemplates.init!")
+ return true;
+ });
+ test.throws(function() {
+ AccountsTemplates.removeField("");
+ }, function(err) {
+ if (err instanceof Error && err.message === "AccountsTemplates.removeField should strictly be called before AccountsTemplates.init!")
+ return true;
+ });
+ AccountsTemplates._initialized = false;
+
+ // Trying to remove a non-existing field
+ test.throws(function() {
+ AccountsTemplates.removeField("foo");
+ }, function(err) {
+ if (err instanceof Error && err.message == "A field called foo does not exist!")
+ return true;
+ });
+
+ // Trying to remove an existing field
+ var email = AccountsTemplates.removeField("email");
+ test.isUndefined(AccountsTemplates.getField("email"));
+ // ...and puts it back in for tests re-run
+ AccountsTemplates.addField(email);
+
+ // Trying to add an already existing field
+ test.throws(function() {
+ var pwd = AccountsTemplates.getField("password");
+ AccountsTemplates.addField(pwd);
+ }, function(err) {
+ if (err instanceof Error && err.message == "A field called password already exists!")
+ return true;
+ });
+
+ var login = {
+ _id: "login",
+ displayName: "Email",
+ type: "email"
+ };
+
+ // Successful add
+ AccountsTemplates.addField(login);
+ // ...and removes it for tests re-run
+ AccountsTemplates.removeField("login");
+
+ // Invalid field.type
+ test.throws(function() {
+ AccountsTemplates.addField({
+ _id: "foo",
+ displayName: "Foo",
+ type: "bar"
+ });
+ }, function(err) {
+ if (err instanceof Error && err.message == "field.type is not valid!")
+ return true;
+ });
+
+ // Invalid minLength
+ test.throws(function() {
+ AccountsTemplates.addField({
+ _id: "first-name",
+ displayName: "First Name",
+ type: "text",
+ minLength: 0
+ });
+ }, function(err) {
+ if (err instanceof Error && err.message == "field.minLength should be greater than zero!")
+ return true;
+ });
+ // Invalid maxLength
+ test.throws(function() {
+ AccountsTemplates.addField({
+ _id: "first-name",
+ displayName: "First Name",
+ type: "text",
+ maxLength: 0
+ });
+ }, function(err) {
+ if (err instanceof Error && err.message == "field.maxLength should be greater than zero!")
+ return true;
+ });
+ // maxLength < minLength
+ test.throws(function() {
+ AccountsTemplates.addField({
+ _id: "first-name",
+ displayName: "First Name",
+ type: "text",
+ minLength: 2,
+ maxLength: 1
+ });
+ }, function(err) {
+ if (err instanceof Error && err.message == "field.maxLength should be greater than field.maxLength!")
+ return true;
+ });
+
+ // Successful add
+ var first_name = {
+ _id: "first_name",
+ displayName: "First Name",
+ type: "text",
+ minLength: 2,
+ maxLength: 50,
+ required: true
+ };
+ AccountsTemplates.addField(first_name);
+ // Now removes it to be consistent with tests re-run
+ AccountsTemplates.removeField("first_name");
+});
+
+
+Tinytest.add("AccountsTemplates - addFields", function(test) {
+ // Fake uninitialized state...
+ AccountsTemplates._initialized = false;
+
+ if (Meteor.isClient) {
+ // addFields does not exist client-side
+ test.throws(function() {
+ AccountsTemplates.addFields();
+ });
+ } else {
+ // Not an array of objects
+ test.throws(function() {
+ AccountsTemplates.addFields("");
+ }, function(err) {
+ if (err instanceof Error && err.message === "field argument should be an array of valid field objects!")
+ return true;
+ });
+ test.throws(function() {
+ AccountsTemplates.addFields(100);
+ }, function(err) {
+ if (err instanceof Error && err.message === "field argument should be an array of valid field objects!")
+ return true;
+ });
+ // Empty array
+ test.throws(function() {
+ AccountsTemplates.addFields([]);
+ }, function(err) {
+ if (err instanceof Error && err.message === "field argument should be an array of valid field objects!")
+ return true;
+ });
+
+ // Successful add
+ var first_name = {
+ _id: "first_name",
+ displayName: "First Name",
+ type: "text",
+ minLength: 2,
+ maxLength: 50,
+ required: true
+ };
+ var last_name = {
+ _id: "last_name",
+ displayName: "Last Name",
+ type: "text",
+ minLength: 2,
+ maxLength: 100,
+ required: false
+ };
+ AccountsTemplates.addFields([first_name, last_name]);
+ // Now removes ot to be consistend with tests re-run
+ AccountsTemplates.removeField("first_name");
+ AccountsTemplates.removeField("last_name");
+ }
+ // Restores initialized state...
+ AccountsTemplates._initialized = true;
+});
+
+
+Tinytest.add("AccountsTemplates - setState/getState", function(test) {
+ if (Meteor.isServer) {
+ // getState does not exist server-side
+ test.throws(function() {
+ AccountsTemplates.getState();
+ });
+ // setState does not exist server-side
+ test.throws(function() {
+ AccountsTemplates.setState();
+ });
+ } else {
+ _.each(AccountsTemplates.STATES, function(state){
+ AccountsTemplates.setState(state);
+ test.equal(AccountsTemplates.getState(), state);
+ });
+ // Setting an invalid state should throw a Meteor.Error
+ test.throws(function() {
+ AccountsTemplates.setState("foo");
+ }, function(err) {
+ if (err instanceof Meteor.Error && err.details == "accounts-templates-core package got an invalid state value!")
+ return true;
+ });
+ }
+});
+
+
+// -------------------------------------
+// TODO: complite the following tests...
+// -------------------------------------
+
+
+Tinytest.add("AccountsTemplates - configure", function(test) {
+ if (Meteor.isClient) {
+ // configure does not exist client-side
+ test.throws(function() {
+ AccountsTemplates.configure({});
+ });
+ } else {
+ // TODO: write actual tests...
+ }
+}); \ No newline at end of file