text: const utils = require('../../utils/e2e-mongoose');
  const mocks = require('../mocks');
  
  const mockComment = 'This is a test comment.';
  const mockReply = 'This is a test reply';
  const mockUser = {
    email: `${new Date().getTime()}@test.com`,
    name: 'Test User',
    pw: 'testtesttest'
  };
  
  module.exports = {
    '@tags': ['embed-stream', 'comment', 'premodoff', 'premodon'],
    before: () => {
      utils.before();
    },
    'User registers and posts a comment with premod off': client => {
      client.perform((client, done) => {
        mocks.settings({moderation: 'post'})
        .then(() => {
  
          // Load Page
          client.resizeWindow(1200, 800)
            .url(client.globals.baseUrl)
            .frame('coralStreamIframe')
  
            // Register and Log In
            .waitForElementVisible('#commentBox', 1000)
            .waitForElementVisible('#coralSignInButton', 2000)
            .click('#coralSignInButton')
            .waitForElementVisible('#coralRegister', 1000)
            .click('#coralRegister')
            .waitForElementVisible('#email', 1000)
            .setValue('#email', mockUser.email)
            .setValue('#displayName', mockUser.name)
            .setValue('#password', mockUser.pw)
            .setValue('#confirmPassword', mockUser.pw)
            .click('#coralSignUpButton')
            .waitForElementVisible('#coralLogInButton', 10000)
            .click('#coralLogInButton')
            .waitForElementVisible('.coral-plugin-commentbox-button', 4000)
  
            // Post a comment
            .setValue('.coral-plugin-commentbox-textarea', mockComment)
            .click('.coral-plugin-commentbox-button')
            .waitForElementVisible('.comment', 1000)
  
            // Verify that it appears
            .assert.containsText('.comment', mockComment);
          done();
        })
        .catch((err) => {
          console.log(err);
          done();
        });
      });
    },
    'User posts a comment with premod on': client => {
      client.perform((client, done) => {
        mocks.settings({moderation: 'pre'})
        .then(() => {
  
          // Load Page
          client.url(client.globals.baseUrl)
            .frame('coralStreamIframe');
  
            // Post a comment
          client.waitForElementVisible('.coral-plugin-commentbox-button', 2000)
            .setValue('.coral-plugin-commentbox-textarea', mockComment)
            .click('.coral-plugin-commentbox-button')
            .waitForElementVisible('#coral-notif', 1000)
  
            // Verify that it appears
            .assert.containsText('#coral-notif', 'moderation team');
          done();
        })
        .catch((err) => {
          console.log(err);
          done();
        });
      });
    },
    'User replies to a comment with premod off': client => {
      client.perform((client, done) => {
        mocks.settings({moderation: 'post'})
        .then(() => {
  
          // Load Page
          client.resizeWindow(1200, 800)
            .url(client.globals.baseUrl)
            .frame('coralStreamIframe');
  
            // Post a comment
          client.waitForElementVisible('.coral-plugin-commentbox-button', 2000)
            .setValue('.coral-plugin-commentbox-textarea', mockComment)
            .click('.coral-plugin-commentbox-button')
  
            // Post a reply
            .waitForElementVisible('.coral-plugin-replies-reply-button', 5000)
            .click('.coral-plugin-replies-reply-button')
            .waitForElementVisible('#replyText')
            .setValue('#replyText', mockReply)
            .click('.coral-plugin-replies-textarea button')
            .waitForElementVisible('.reply', 2000)
  
            // Verify that it appears
            .assert.containsText('.reply', mockReply);
          done();
        })
        .catch((err) => {
          console.log(err);
          done();
        });
      });
    },
    'User replies to a comment with premod on': client => {
      client.perform((client, done) => {
        mocks.settings({moderation: 'pre'})
  
        // Add a mock user
        .then(() => {
          return mocks.users([{
            displayName: 'Baby Blue',
            email: 'whale@tale.sea',
            password: 'krill'
          }]);
        })
  
        // Add a mock preapproved comment by that user
        .then((user) => {
          return mocks.comments([{
            body: 'Whales are not fish.',
            status: 'accepted',
            author_id: user.id
          }]);
        })
        .then(() => {
  
          // Load Page
          client.resizeWindow(1200, 800)
            .url(client.globals.baseUrl)
            .frame('coralStreamIframe');
  
            // Post a reply
          client.waitForElementVisible('.coral-plugin-replies-reply-button', 5000)
            .click('.coral-plugin-replies-reply-button')
            .waitForElementVisible('#replyText')
            .setValue('#replyText', mockReply)
            .click('.coral-plugin-replies-textarea button')
            .waitForElementVisible('#coral-notif', 1000)
  
            // Verify that it appears
            .assert.containsText('#coral-notif', 'moderation team');
          done();
        })
        .catch((err) => {
          console.log(err);
          done();
        });
      });
    },
    'Total comment count premod on': client => {
      client.perform((client, done) => {
        client.url(client.globals.baseUrl)
          .frame('coralStreamIframe');
  
          // Verify that comment count is correct
        client.waitForElementVisible('.coral-plugin-comment-count-text', 2000)
          .assert.containsText('.coral-plugin-comment-count-text', '1 Comment');
        done();
      });
    },
    after: client => {
      utils.after();
      client.end();
    }
  };
  