describe("email notifications plugin", function(){
  //create a new pad before each test run
  beforeEach(function(cb){
    helper.newPad(cb);
    this.timeout(60000);
  });

  // Subscribe malformed email
  var malformedEmail = "tutti@bad-email";

  // Subscribe good email
  var goodEmail = "tutti@non-existing-domain.org";

  // Test the form in mysetting menu

  // Launch the tests
  // First test without options selected
  it("makes test without options selected", function(done) {
    var chrome$ = helper.padChrome$;

    //click on the settings button to make settings visible
    var $settingsButton = chrome$(".buttonicon-settings");
    $settingsButton.click();

    // Show the notification form
    chrome$('.ep_email_settings').slideDown(function() {

      chrome$('#ep_email_form_mysettings [name=ep_email]').val(goodEmail);
      chrome$('#ep_email_form_mysettings [name=ep_email_onStart]').prop('checked', false);
      chrome$('#ep_email_form_mysettings [name=ep_email_onEnd]').prop('checked', false);

      chrome$('#ep_email_form_mysettings [name=ep_email_subscribe]').click(); //function() {

      // Is the correct gritter msg there
      helper.waitFor(function() {
        return chrome$(".gritter-item").is(':visible') == true;
      })
      .done(function(){
        expect(chrome$(".emailNotificationsSubscrOptionsMissing").is(':visible')).to.be(true);
        done();
      });
    });
  });

  // Second, test with a malformed email
  it("makes test subscription with malformed email address", function(done) {
    var chrome$ = helper.padChrome$;

    //click on the settings button to make settings visible
    var $settingsButton = chrome$(".buttonicon-settings");
    $settingsButton.click();

    // Show the notification form
    chrome$('.ep_email_settings').slideDown(function() {

      chrome$('#ep_email_form_mysettings [name=ep_email]').val(malformedEmail);
      chrome$('#ep_email_form_mysettings [name=ep_email_onStart]').prop('checked', true);

      chrome$('#ep_email_form_mysettings [name=ep_email_subscribe]').click();

      // Is the correct gritter msg there
      helper.waitFor(function() {
        return chrome$(".gritter-item").is(':visible') == true;
      })
      .done(function(){
        expect(chrome$(".emailNotificationsSubscrResponseBad").is(':visible')).to.be(true);
        done();
      });
    });
  });

  // Third, test unsubscription with an email not registered
  it("makes test unsubscription with an unregistered email address", function(done) {
    var chrome$ = helper.padChrome$;

    //click on the settings button to make settings visible
    var $settingsButton = chrome$(".buttonicon-settings");
    $settingsButton.click();

    // Show the notification form
    chrome$('.ep_email_settings').slideDown(function() {

      chrome$('#ep_email_form_mysettings [name=ep_email]').val(goodEmail);

      chrome$('#ep_email_form_mysettings [name=ep_email_unsubscribe]').click();

      // Is the correct gritter msg there
      helper.waitFor(function() {
        return chrome$(".gritter-item").is(':visible') == true;
      })
      .done(function(){
        expect(chrome$(".emailNotificationsUnsubscrResponseBad").is(':visible')).to.be(true);

        done();
      });
    });
  });

  // Fourth, test subscription with a good email
  it("makes test subscription with an unregistered email address", function(done) {
    var chrome$ = helper.padChrome$;

    //click on the settings button to make settings visible
    var $settingsButton = chrome$(".buttonicon-settings");
    $settingsButton.click();

    // Show the notification form
    chrome$('.ep_email_settings').slideDown(function() {

      chrome$('#ep_email_form_mysettings [name=ep_email]').val(goodEmail);
      chrome$('#ep_email_form_mysettings [name=ep_email_onStart]').prop('checked', true);

      chrome$('#ep_email_form_mysettings [name=ep_email_subscribe]').click();

      // Is the correct gritter msg there
      helper.waitFor(function() {
        return chrome$(".gritter-item").is(':visible') == true;
      })
      .done(function(){
        expect(chrome$(".emailNotificationsSubscrResponseGood").is(':visible')).to.be(true);

        done();
      });
    });
  });
});