chore: init commit
in worker.../repo/GITFOLDER.zip is the .git folder.
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "test_helper"
|
||||
|
||||
class AdminHelperTest < ActionView::TestCase
|
||||
test "format_attribute formats boolean true" do
|
||||
user = build(:admin)
|
||||
result = format_attribute(user, :admin)
|
||||
assert_match(/Yes/, result)
|
||||
assert_match(/bg-green-100/, result)
|
||||
end
|
||||
|
||||
test "format_attribute formats boolean false" do
|
||||
user = build(:student)
|
||||
result = format_attribute(user, :admin)
|
||||
assert_match(/No/, result)
|
||||
assert_match(/bg-gray-100/, result)
|
||||
end
|
||||
|
||||
test "format_attribute formats date" do
|
||||
date = Date.new(2025, 12, 22)
|
||||
user = build(:student, created_at: date)
|
||||
result = format_attribute(user, :created_at)
|
||||
assert_equal "December 22, 2025", result
|
||||
end
|
||||
|
||||
test "format_attribute formats nil value" do
|
||||
user = build(:student, name: nil)
|
||||
result = format_attribute(user, :name)
|
||||
assert_match(/—/, result)
|
||||
assert_match(/text-gray-400/, result)
|
||||
end
|
||||
|
||||
test "format_attribute formats string" do
|
||||
user = build(:student, email: "test@example.com")
|
||||
result = format_attribute(user, :email)
|
||||
assert_equal "test@example.com", result
|
||||
end
|
||||
|
||||
test "boolean_badge renders yes badge" do
|
||||
result = boolean_badge(true)
|
||||
assert_match(/Yes/, result)
|
||||
assert_match(/bg-green-100/, result)
|
||||
assert_match(/text-green-800/, result)
|
||||
end
|
||||
|
||||
test "boolean_badge renders no badge" do
|
||||
result = boolean_badge(false)
|
||||
assert_match(/No/, result)
|
||||
assert_match(/bg-gray-100/, result)
|
||||
assert_match(/text-gray-800/, result)
|
||||
end
|
||||
|
||||
test "sort_icon returns up arrow for asc sort" do
|
||||
params[:sort] = "name"
|
||||
params[:direction] = "asc"
|
||||
assert_equal "↑", sort_icon(:name)
|
||||
end
|
||||
|
||||
test "sort_icon returns down arrow for desc sort" do
|
||||
params[:sort] = "name"
|
||||
params[:direction] = "desc"
|
||||
assert_equal "↓", sort_icon(:name)
|
||||
end
|
||||
|
||||
test "sort_icon returns both arrows for unsorted column" do
|
||||
params[:sort] = "email"
|
||||
assert_equal "⇅", sort_icon(:name)
|
||||
end
|
||||
|
||||
# TODO: Fix sort_link routing issues in Admin - create separate ticket
|
||||
# Error: No route matches {direction: "desc", sort: :name}
|
||||
test "sort_link generates correct direction toggle" do
|
||||
skip "Broken due to routing issues"
|
||||
# params[:sort] = "name"
|
||||
# params[:direction] = "asc"
|
||||
# result = sort_link(:name, "Name")
|
||||
# assert_match(/direction=desc/, result)
|
||||
# assert_match(/Name/, result)
|
||||
end
|
||||
|
||||
# TODO: Fix sort_link routing issues in Admin - create separate ticket
|
||||
# Error: No route matches {direction: "asc", sort: :name}
|
||||
test "sort_link defaults to asc for new sort" do
|
||||
skip "Broken due to routing issues"
|
||||
# params[:sort] = nil
|
||||
# params[:direction] = nil
|
||||
# result = sort_link(:name, "Name")
|
||||
# assert_match(/direction=asc/, result)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,81 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "test_helper"
|
||||
|
||||
class ApplicationHelperTest < ActionView::TestCase
|
||||
test "safe_url returns valid http URL" do
|
||||
url = "http://example.com"
|
||||
|
||||
result = safe_url(url)
|
||||
|
||||
assert_equal url, result
|
||||
end
|
||||
|
||||
test "safe_url returns valid https URL" do
|
||||
url = "https://example.com"
|
||||
|
||||
result = safe_url(url)
|
||||
|
||||
assert_equal url, result
|
||||
end
|
||||
|
||||
test "safe_url returns valid https URL with path and query" do
|
||||
url = "https://example.com/path?query=value"
|
||||
|
||||
result = safe_url(url)
|
||||
|
||||
assert_equal url, result
|
||||
end
|
||||
|
||||
test "safe_url returns nil for javascript URL" do
|
||||
url = "javascript:alert('XSS')"
|
||||
|
||||
result = safe_url(url)
|
||||
|
||||
assert_nil result
|
||||
end
|
||||
|
||||
test "safe_url returns nil for data URL" do
|
||||
url = "data:text/html,<script>alert('XSS')</script>"
|
||||
|
||||
result = safe_url(url)
|
||||
|
||||
assert_nil result
|
||||
end
|
||||
|
||||
test "safe_url returns nil for invalid URL" do
|
||||
url = "not a valid url"
|
||||
|
||||
result = safe_url(url)
|
||||
|
||||
assert_nil result
|
||||
end
|
||||
|
||||
test "safe_url returns nil for blank string" do
|
||||
result = safe_url("")
|
||||
|
||||
assert_nil result
|
||||
end
|
||||
|
||||
test "safe_url returns nil for nil" do
|
||||
result = safe_url(nil)
|
||||
|
||||
assert_nil result
|
||||
end
|
||||
|
||||
test "safe_url returns nil for ftp URL" do
|
||||
url = "ftp://example.com"
|
||||
|
||||
result = safe_url(url)
|
||||
|
||||
assert_nil result
|
||||
end
|
||||
|
||||
test "safe_url returns nil for file URL" do
|
||||
url = "file:///etc/passwd"
|
||||
|
||||
result = safe_url(url)
|
||||
|
||||
assert_nil result
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,17 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
def assert_permit(user, record, action)
|
||||
msg = "User #{user.inspect} should be permitted to #{action} #{record}, but isn't permitted"
|
||||
assert permit(user, record, action), msg
|
||||
end
|
||||
|
||||
def refute_permit(user, record, action)
|
||||
msg = "User #{user.inspect} should NOT be permitted to #{action} #{record}, but is permitted"
|
||||
assert_not permit(user, record, action), msg
|
||||
end
|
||||
|
||||
def permit(user, record, action)
|
||||
test_name = self.class.ancestors.select { |a| a.to_s.match(/PolicyTest/) }.first
|
||||
klass = test_name.to_s.gsub("Test", "")
|
||||
klass.constantize.new(user, record).public_send("#{action}?")
|
||||
end
|
||||
Reference in New Issue
Block a user