mirror of
https://github.com/System-End/hackatime.git
synced 2026-04-19 16:38:23 +00:00
* Fix data export + Capybara * Continue? * A ton of system tests :D + test cleanup * More system tests * Add placeholder keys for tests? * Get rid of the double-query! * Speed up CI Chrome setup by avoiding snap installs * Pin CI Chrome version to reduce system test flakiness * Stabilize integrations settings system test interaction
177 lines
4.1 KiB
Ruby
177 lines
4.1 KiB
Ruby
require "test_helper"
|
|
|
|
class SettingsGoalsControllerTest < ActionDispatch::IntegrationTest
|
|
fixtures :users
|
|
|
|
test "show renders goals settings page" do
|
|
user = users(:one)
|
|
sign_in_as(user)
|
|
|
|
get my_settings_goals_path
|
|
|
|
assert_response :success
|
|
assert_inertia_component "Users/Settings/Goals"
|
|
|
|
page = inertia_page
|
|
assert_equal my_settings_goals_path, page.dig("props", "section_paths", "goals")
|
|
assert_equal [], page.dig("props", "user", "programming_goals")
|
|
end
|
|
|
|
test "create saves valid goal" do
|
|
user = users(:one)
|
|
sign_in_as(user)
|
|
|
|
post my_settings_goals_create_path, params: {
|
|
goal: {
|
|
period: "day",
|
|
target_seconds: 3600,
|
|
languages: [ "Ruby" ],
|
|
projects: [ "hackatime" ]
|
|
}
|
|
}
|
|
|
|
assert_response :redirect
|
|
assert_redirected_to my_settings_goals_path
|
|
|
|
saved_goal = user.reload.goals.first
|
|
assert_equal "day", saved_goal.period
|
|
assert_equal [ "Ruby" ], saved_goal.languages
|
|
assert_equal [ "hackatime" ], saved_goal.projects
|
|
end
|
|
|
|
test "rejects sixth goal when limit reached" do
|
|
user = users(:one)
|
|
sign_in_as(user)
|
|
|
|
5.times do |index|
|
|
user.goals.create!(
|
|
period: "day",
|
|
target_seconds: 1800 + index,
|
|
languages: [],
|
|
projects: []
|
|
)
|
|
end
|
|
|
|
post my_settings_goals_create_path, params: {
|
|
goal: {
|
|
period: "day",
|
|
target_seconds: 9999,
|
|
languages: [],
|
|
projects: []
|
|
}
|
|
}
|
|
|
|
assert_response :unprocessable_entity
|
|
assert_equal 5, user.reload.goals.count
|
|
end
|
|
|
|
test "create rejects invalid goal period" do
|
|
user = users(:one)
|
|
sign_in_as(user)
|
|
|
|
post my_settings_goals_create_path, params: {
|
|
goal: {
|
|
period: "year",
|
|
target_seconds: 1800,
|
|
languages: [],
|
|
projects: []
|
|
}
|
|
}
|
|
|
|
assert_response :unprocessable_entity
|
|
assert_equal 0, user.reload.goals.count
|
|
end
|
|
|
|
test "create rejects nonpositive goal target" do
|
|
user = users(:one)
|
|
sign_in_as(user)
|
|
|
|
post my_settings_goals_create_path, params: {
|
|
goal: {
|
|
period: "day",
|
|
target_seconds: 0,
|
|
languages: [],
|
|
projects: []
|
|
}
|
|
}
|
|
|
|
assert_response :unprocessable_entity
|
|
assert_equal 0, user.reload.goals.count
|
|
end
|
|
|
|
test "create rejects impossible day target" do
|
|
user = users(:one)
|
|
sign_in_as(user)
|
|
|
|
post my_settings_goals_create_path, params: {
|
|
goal: {
|
|
period: "day",
|
|
target_seconds: 25.hours.to_i,
|
|
languages: [],
|
|
projects: []
|
|
}
|
|
}
|
|
|
|
assert_response :unprocessable_entity
|
|
assert_equal 0, user.reload.goals.count
|
|
end
|
|
|
|
test "update saves valid goal changes" do
|
|
user = users(:one)
|
|
goal = user.goals.create!(
|
|
period: "day",
|
|
target_seconds: 1800,
|
|
languages: [ "Ruby" ],
|
|
projects: [ "alpha" ]
|
|
)
|
|
sign_in_as(user)
|
|
|
|
patch my_settings_goal_update_path(goal_id: goal.id), params: {
|
|
goal: {
|
|
period: "week",
|
|
target_seconds: 7200,
|
|
languages: [ "Python" ],
|
|
projects: [ "beta" ]
|
|
}
|
|
}
|
|
|
|
assert_response :redirect
|
|
assert_redirected_to my_settings_goals_path
|
|
|
|
goal.reload
|
|
assert_equal "week", goal.period
|
|
assert_equal 7200, goal.target_seconds
|
|
assert_equal [ "Python" ], goal.languages
|
|
assert_equal [ "beta" ], goal.projects
|
|
end
|
|
|
|
test "update rejects invalid goal and re-renders settings page" do
|
|
user = users(:one)
|
|
goal = user.goals.create!(period: "day", target_seconds: 1800)
|
|
sign_in_as(user)
|
|
|
|
patch my_settings_goal_update_path(goal_id: goal.id), params: {
|
|
goal: {
|
|
period: "year",
|
|
target_seconds: 1800
|
|
}
|
|
}
|
|
|
|
assert_response :unprocessable_entity
|
|
assert_inertia_component "Users/Settings/Goals"
|
|
assert_equal "day", goal.reload.period
|
|
end
|
|
|
|
test "destroy removes goal" do
|
|
user = users(:one)
|
|
goal = user.goals.create!(period: "day", target_seconds: 1800)
|
|
sign_in_as(user)
|
|
|
|
assert_difference -> { user.reload.goals.count }, -1 do
|
|
delete my_settings_goal_destroy_path(goal_id: goal.id)
|
|
end
|
|
|
|
assert_response :redirect
|
|
assert_redirected_to my_settings_goals_path
|
|
end
|
|
end
|