import startApp from 'wizard/test/helpers/start-app';

var wizard;
module("Acceptance: wizard", {
  beforeEach() {
    wizard = startApp();
  },

  teardown() {
    Ember.run(wizard, 'destroy');
  }
});

test("Wizard starts", assert => {
  visit("/");
  andThen(() => {
    assert.ok(exists('.wizard-column-contents'));
    assert.equal(currentPath(), 'step');
  });
});

test("Going back and forth in steps", assert => {
  visit("/steps/hello-world");
  andThen(() => {
    assert.ok(exists('.wizard-step'));
    assert.ok(exists('.wizard-step-hello-world'), 'it adds a class for the step id');

    assert.ok(exists('.wizard-progress'));
    assert.ok(exists('.wizard-step-title'));
    assert.ok(exists('.wizard-step-description'));
    assert.ok(!exists('.invalid .field-full-name'), "don't show it as invalid until the user does something");
    assert.ok(exists('.wizard-field .field-description'));
    assert.ok(!exists('.wizard-btn.back'));
    assert.ok(!exists('.wizard-field .field-error-description'));
  });

  // invalid data
  click('.wizard-btn.next');
  andThen(() => {
    assert.ok(exists('.invalid .field-full-name'));
  });

  // server validation fail
  fillIn('input.field-full-name', "Server Fail");
  click('.wizard-btn.next');
  andThen(() => {
    assert.ok(exists('.invalid .field-full-name'));
    assert.ok(exists('.wizard-field .field-error-description'));
  });

  // server validation ok
  fillIn('input.field-full-name', "Evil Trout");
  click('.wizard-btn.next');
  andThen(() => {
    assert.ok(!exists('.wizard-field .field-error-description'));
    assert.ok(!exists('.wizard-step-title'));
    assert.ok(!exists('.wizard-step-description'));

    assert.ok(exists('select.field-snack'), "went to the next step");
    assert.ok(exists('.preview-area'), "renders the component field");

    assert.ok(!exists('.wizard-btn.next'));
    assert.ok(exists('.wizard-btn.done'), 'last step shows a done button');
    assert.ok(exists('.action-link.back'), 'shows the back button');
  });

  click('.action-link.back');
  andThen(() => {
    assert.ok(exists('.wizard-step-title'));
    assert.ok(exists('.wizard-btn.next'));
    assert.ok(!exists('.wizard-prev'));
  });
});
