From 7ceb55fd67d20c666fdaf6c135c5f9118a072bd0 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 26 Aug 2019 16:55:20 +0200
Subject: [PATCH] too long login should return validation error

---
 .../src/main/js/gui/admin/EditUserDialog.js   |  8 ++++
 .../test/js/gui/admin/EditUserDialog-test.js  | 43 ++++++++++++-------
 2 files changed, 35 insertions(+), 16 deletions(-)

diff --git a/frontend-js/src/main/js/gui/admin/EditUserDialog.js b/frontend-js/src/main/js/gui/admin/EditUserDialog.js
index fad069c7d2..53d9f99470 100644
--- a/frontend-js/src/main/js/gui/admin/EditUserDialog.js
+++ b/frontend-js/src/main/js/gui/admin/EditUserDialog.js
@@ -674,6 +674,10 @@ EditUserDialog.prototype.checkValidity = function () {
     error += "<li>Login must not be empty</li>";
     isValid = false;
   }
+  if (self.getLogin().length > 255) {
+    error += "<li>Login must shorter than 256 characters</li>";
+    isValid = false;
+  }
   if (isValid) {
     return Promise.resolve(true);
   } else {
@@ -708,6 +712,10 @@ EditUserDialog.prototype.getLogin = function () {
   return $("[name='userLogin']", self.getElement()).val();
 };
 
+EditUserDialog.prototype.setLogin = function (login) {
+  $("[name='userLogin']", this.getElement()).val(login);
+};
+
 /**
  *
  * @returns {string}
diff --git a/frontend-js/src/test/js/gui/admin/EditUserDialog-test.js b/frontend-js/src/test/js/gui/admin/EditUserDialog-test.js
index d6eeb71c49..8d82933451 100644
--- a/frontend-js/src/test/js/gui/admin/EditUserDialog-test.js
+++ b/frontend-js/src/test/js/gui/admin/EditUserDialog-test.js
@@ -15,10 +15,14 @@ var chai = require('chai');
 var assert = chai.assert;
 var expect = chai.expect;
 
-function createEditUserDialog(project, user) {
+/**
+ *
+ * @param {User} user
+ * @return {EditUserDialog}
+ */
+function createEditUserDialog(user) {
   return new EditUserDialog({
     element: testDiv,
-    project: project,
     user: user,
     configuration: helper.getConfiguration(),
     serverConnector: ServerConnector
@@ -33,8 +37,7 @@ describe('EditUserDialog', function () {
       var project;
       var user = new User({});
       return ServerConnector.getProject().then(function (result) {
-        project = result;
-        dialog = createEditUserDialog(project, user);
+        dialog = createEditUserDialog(user);
         return dialog.init();
       }).then(function () {
         assert.equal(0, logger.getWarnings().length);
@@ -48,11 +51,9 @@ describe('EditUserDialog', function () {
   describe('checkValidity', function () {
     it('empty user', function () {
       var dialog;
-      var project;
       var user = new User({});
       return ServerConnector.getProject().then(function (result) {
-        project = result;
-        dialog = createEditUserDialog(project, user);
+        dialog = createEditUserDialog(user);
         return dialog.init();
       }).then(function () {
         return dialog.checkValidity().then(function () {
@@ -65,16 +66,30 @@ describe('EditUserDialog', function () {
       });
     });
 
+    it('too long user login', function () {
+      var dialog;
+      var user = new User({});
+      dialog = createEditUserDialog(user);
+      return dialog.init().then(function () {
+        dialog.setLogin("x".repeat(256));
+        return dialog.checkValidity().then(function () {
+          assert.ok(null);
+        }).catch(function (error) {
+          assert.ok(error instanceof ValidationError);
+        });
+      }).then(function () {
+        dialog.destroy();
+      });
+    });
+
     it('existing user', function () {
       var dialog;
-      var project;
       var user;
       return ServerConnector.getUser("anonymous").then(function (result) {
         user = result;
         return ServerConnector.getProject();
       }).then(function (result) {
-        project = result;
-        dialog = createEditUserDialog(project, user);
+        dialog = createEditUserDialog(user);
         return dialog.init();
       }).then(function () {
         return dialog.checkValidity();
@@ -90,14 +105,12 @@ describe('EditUserDialog', function () {
     it('existing user', function () {
       helper.loginAsAdmin();
       var dialog;
-      var project;
       var user;
       return ServerConnector.getUser("admin").then(function (result) {
         user = result;
         return ServerConnector.getProject();
       }).then(function (result) {
-        project = result;
-        dialog = createEditUserDialog(project, user);
+        dialog = createEditUserDialog(user);
         return dialog.init();
       }).then(function () {
         return dialog.onSaveClicked();
@@ -111,7 +124,6 @@ describe('EditUserDialog', function () {
     it('existing user', function () {
       helper.loginAsAdmin();
       var dialog;
-      var project;
       var user;
       var serializedPrivileges;
       return ServerConnector.getUser("anonymous").then(function (result) {
@@ -119,8 +131,7 @@ describe('EditUserDialog', function () {
         serializedPrivileges = user.getPrivileges().slice();
         return ServerConnector.getProject();
       }).then(function (result) {
-        project = result;
-        dialog = createEditUserDialog(project, user);
+        dialog = createEditUserDialog(user);
         return dialog.init();
       }).then(function () {
         var checkbox = $("[name=privilege-checkbox]", dialog.getElement())[0];
-- 
GitLab