class Spinach::Features::User < Spinach::FeatureSteps
  include SharedAuthentication
  include SharedPaths
  include SharedUser
  include SharedProject

  step 'I should see user "John Doe" page' do
    expect(title).to match(/^\s*John Doe/)
  end

  step 'I visit unsubscribe link' do
    email = Base64.urlsafe_encode64("joh@doe.org")
    visit "/unsubscribes/#{email}"
  end

  step 'I should see unsubscribe text and button' do
    page.should have_content "Unsubscribe from Admin notifications Yes, I want to unsubscribe joh@doe.org from any further admin emails."
  end

  step 'I press the unsubscribe button' do
    click_button("Unsubscribe")
  end

  step 'I should be unsubscribed' do
    current_path.should == root_path
  end

  step '"John Doe" has contributions' do
    user = User.find_by(name: 'John Doe')
    project = contributed_project

    # Issue controbution
    issue_params = { title: 'Bug in old browser' }
    Issues::CreateService.new(project, user, issue_params).execute

    # Push code contribution
    push_params = {
      project: project,
      action: Event::PUSHED,
      author_id: user.id,
      data: { commit_count: 3 }
    }

    Event.create(push_params)
  end

  step 'I should see contributed projects' do
    within '.contributed-projects' do
      page.should have_content(@contributed_project.name)
    end
  end

  step 'I should see contributions calendar' do
    page.should have_css('.cal-heatmap-container')
  end

  def contributed_project
    @contributed_project ||= create(:project, :public)
  end
end
