[CORD-1133] E2E GUI Tests

Change-Id: I521d0cc068a3e328f3d4f421ba4b342bea167e19
(cherry picked from commit d3b57a10471fcaf579707d636c0dbeb9328bae33)
diff --git a/e2e/crud/crud.spec.js b/e2e/crud/crud.spec.js
new file mode 100644
index 0000000..f3660b4
--- /dev/null
+++ b/e2e/crud/crud.spec.js
@@ -0,0 +1,51 @@
+const user = require('../test_helpers/user');
+const page = require('./crud.po');
+const config = require('../test_helpers/config');
+
+describe('XOS CRUD Page', function() {
+
+  beforeEach((done) => {
+    user.login()
+      .then(() => {
+        done();
+      });
+  });
+
+  describe('list view', () => {
+    beforeEach(() => {
+      browser.get(`${config.url}/core/nodes/`);
+    });
+    it('should have a table', () => {
+      expect(page.tableRows.count()).toBe(2);
+      expect(page.tableColumn.count()).toBe(5);
+      expect(page.deleteBtn.count()).toBe(1); // per row
+    });
+
+    it('should have an add button', () => {
+      expect(page.addBtn.isDisplayed()).toBeTruthy();
+      page.addBtn.click();
+      expect(browser.getCurrentUrl()).toBe(`${config.url}/core/nodes/add`);
+    });
+  });
+
+  describe('details view', () => {
+
+    describe('for an existing model', () => {
+      beforeEach(() => {
+        browser.get(`${config.url}/core/nodes/1`);
+      });
+      it('should have a form', () => {
+        expect(page.formInputs.count()).toBe(5);
+        expect(page.formBtn.isPresent()).toBeTruthy();
+      });
+
+      it('should save the model', () => {
+        page.nameField.clear().sendKeys('test');
+        page.formBtn.click();
+        expect(page.nameField.getAttribute('value')).toBe('test');
+        expect(page.successFeedback.isDisplayed()).toBeTruthy();
+        browser.sleep(3000)
+      });
+    })
+  });
+});
\ No newline at end of file