From feecf626aca9459333413d5508d445f5b260f3fc Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Thu, 12 Jun 2025 16:52:38 -0700 Subject: [PATCH 1/7] formatting and cleaning up deprecation warnings --- src/ext/avram.cr | 2 +- src/lucky_flow/error_message_when_not_found.cr | 2 +- src/lucky_flow/find_element.cr | 6 +++--- src/lucky_flow/selenium/driver.cr | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ext/avram.cr b/src/ext/avram.cr index 757fcc1..d7e8160 100644 --- a/src/ext/avram.cr +++ b/src/ext/avram.cr @@ -12,7 +12,7 @@ module AvramLuckyFlowHelpers # ``` def fill_form( form : Avram::SaveOperation.class | Avram::Operation.class, - **fields_and_values + **fields_and_values, ) fields_and_values.each do |name, value| element = field("#{form.param_key}:#{name}") diff --git a/src/lucky_flow/error_message_when_not_found.cr b/src/lucky_flow/error_message_when_not_found.cr index 37e1257..288660e 100644 --- a/src/lucky_flow/error_message_when_not_found.cr +++ b/src/lucky_flow/error_message_when_not_found.cr @@ -11,7 +11,7 @@ class LuckyFlow::ErrorMessageWhenNotFound @driver : LuckyFlow::Driver, @selector : String, @inner_text : String?, - @negate : Bool = false + @negate : Bool = false, ) end diff --git a/src/lucky_flow/find_element.cr b/src/lucky_flow/find_element.cr index e847a5e..4ac782e 100644 --- a/src/lucky_flow/find_element.cr +++ b/src/lucky_flow/find_element.cr @@ -19,7 +19,7 @@ class LuckyFlow::FindElement return matching_elements.first if matching_elements.first? break unless has_retries_left? - sleep retry_delay_in_ms + sleep retry_delay_in_ms.miliseconds end raise_element_not_found_error @@ -33,8 +33,8 @@ class LuckyFlow::FindElement (settings.stop_retrying_after / settings.retry_delay).to_i end - private def retry_delay_in_ms : Float - settings.retry_delay.total_milliseconds / 1_000 + private def retry_delay_in_ms : Int32 + settings.retry_delay.total_milliseconds end private def settings diff --git a/src/lucky_flow/selenium/driver.cr b/src/lucky_flow/selenium/driver.cr index 720395b..756cbd6 100644 --- a/src/lucky_flow/selenium/driver.cr +++ b/src/lucky_flow/selenium/driver.cr @@ -89,7 +89,7 @@ abstract class LuckyFlow::Selenium::Driver < LuckyFlow::Driver private def retry_start_session(e) if Time.utc <= @retry_limit - sleep(0.1) + sleep(100.miliseconds) start_session else raise e @@ -98,7 +98,7 @@ abstract class LuckyFlow::Selenium::Driver < LuckyFlow::Driver private def find_elements( strategy : Symbol, - query : String + query : String, ) : Array(LuckyFlow::Element) session.find_elements(strategy, query).map do |element| LuckyFlow::Selenium::Element From 525512f6b2cf6fa91ac90c28f82e85e9bea56128 Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Thu, 12 Jun 2025 16:52:49 -0700 Subject: [PATCH 2/7] Updating Docker testing setup --- Dockerfile | 4 ++-- docker-compose.yml | 2 -- script/setup | 7 ++----- script/test | 4 +--- 4 files changed, 5 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index d6b78c5..9e0dbb0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM crystallang/crystal:1.10.0 +FROM crystallang/crystal:1.14.1 WORKDIR /data EXPOSE 3002 @@ -7,7 +7,7 @@ RUN apt-get update \ libnss3 \ libgconf-2-4 \ chromium-browser \ - firefox-geckodriver \ + firefox \ && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY . /data diff --git a/docker-compose.yml b/docker-compose.yml index dcc921e..62faa36 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3" - services: app: build: diff --git a/script/setup b/script/setup index bec0049..1e3dfc1 100755 --- a/script/setup +++ b/script/setup @@ -4,14 +4,11 @@ set -e set -o pipefail -if command -v docker-compose > /dev/null; then - docker-compose build - docker-compose run app shards install -elif command -v docker compose > /dev/null; then +if command -v docker compose > /dev/null; then docker compose build docker compose run app shards install else - printf 'Docker and/or docker-compose are not installed.\n' + printf 'Command docker compose does not exist. Install Docker.\n' printf 'See https://docs.docker.com/compose/install/ for install instructions.\n' exit 1 fi diff --git a/script/test b/script/test index f6ddfce..5150c77 100755 --- a/script/test +++ b/script/test @@ -4,9 +4,7 @@ set -e set -o pipefail -if command -v docker-compose > /dev/null; then - COMPOSE="docker-compose run app" -elif command -v docker compose > /dev/null; then +if command -v docker compose > /dev/null; then COMPOSE="docker compose run app" fi From a23fa3287e3a1b9cc5c1a3f465018450409ca581 Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Thu, 12 Jun 2025 16:54:31 -0700 Subject: [PATCH 3/7] fixed compilation error --- src/lucky_flow/find_element.cr | 4 ++-- src/lucky_flow/selenium/driver.cr | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lucky_flow/find_element.cr b/src/lucky_flow/find_element.cr index 4ac782e..94347c9 100644 --- a/src/lucky_flow/find_element.cr +++ b/src/lucky_flow/find_element.cr @@ -19,7 +19,7 @@ class LuckyFlow::FindElement return matching_elements.first if matching_elements.first? break unless has_retries_left? - sleep retry_delay_in_ms.miliseconds + sleep retry_delay_in_ms.milliseconds end raise_element_not_found_error @@ -33,7 +33,7 @@ class LuckyFlow::FindElement (settings.stop_retrying_after / settings.retry_delay).to_i end - private def retry_delay_in_ms : Int32 + private def retry_delay_in_ms : Float64 settings.retry_delay.total_milliseconds end diff --git a/src/lucky_flow/selenium/driver.cr b/src/lucky_flow/selenium/driver.cr index 756cbd6..8f9a19b 100644 --- a/src/lucky_flow/selenium/driver.cr +++ b/src/lucky_flow/selenium/driver.cr @@ -89,7 +89,7 @@ abstract class LuckyFlow::Selenium::Driver < LuckyFlow::Driver private def retry_start_session(e) if Time.utc <= @retry_limit - sleep(100.miliseconds) + sleep(100.milliseconds) start_session else raise e From 1f577d400118b80b89ea7d1993ecc66e0ab74ba9 Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Fri, 13 Jun 2025 15:19:38 -0700 Subject: [PATCH 4/7] I don't know.. all specs were failing and now they're not... did this really do anything? --- .github/workflows/ci.yml | 4 +++- spec/lucky_flow_spec.cr | 4 ++-- src/lucky_flow.cr | 2 +- src/lucky_flow/selenium/driver.cr | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81c1610..cb9826f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,6 +34,7 @@ jobs: - uses: browser-actions/setup-chrome@v1 with: chrome-version: stable + install-chromedriver: true if: matrix.os == 'windows-latest' - uses: crystal-lang/install-crystal@v1 with: @@ -58,7 +59,8 @@ jobs: - uses: actions/checkout@v4 - uses: browser-actions/setup-chrome@v1 with: - chrome-version: beta + chrome-version: stable + install-chromedriver: true if: matrix.os == 'windows-latest' - uses: crystal-lang/install-crystal@v1 with: diff --git a/spec/lucky_flow_spec.cr b/spec/lucky_flow_spec.cr index 9d6866e..c50e36e 100644 --- a/spec/lucky_flow_spec.cr +++ b/spec/lucky_flow_spec.cr @@ -494,12 +494,12 @@ private class FakeProcess class_property command : String? class_property shell : Bool? - def initialize(command, shell) + def initialize(command : String?, shell : Bool?) @@command = command @@shell = shell end - def self.find_executable(string) + def self.find_executable(string : String) "/fake_path_to_executable" end end diff --git a/src/lucky_flow.cr b/src/lucky_flow.cr index c3cc8bd..39a3cb4 100644 --- a/src/lucky_flow.cr +++ b/src/lucky_flow.cr @@ -49,7 +49,7 @@ class LuckyFlow driver.visit("#{settings.base_uri}#{path}") end - def open_screenshot(process = Process, time = Time.utc, fullsize = false) : Void + def open_screenshot(process = Process, time = Time.utc, fullsize = false) : Nil filename = generate_screenshot_filename(time) take_screenshot(filename, fullsize) process.new(command: "#{open_command(process)} #{filename}", shell: true) diff --git a/src/lucky_flow/selenium/driver.cr b/src/lucky_flow/selenium/driver.cr index 8f9a19b..03cce99 100644 --- a/src/lucky_flow/selenium/driver.cr +++ b/src/lucky_flow/selenium/driver.cr @@ -9,7 +9,7 @@ abstract class LuckyFlow::Selenium::Driver < LuckyFlow::Driver end def screenshot(path : String) - FileUtils.mkdir_p(File.dirname(path)) + Dir.mkdir_p(File.dirname(path)) session.screenshot(path) end From 3f0d435297150f05bf1066525d59edfbf61172f7 Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Fri, 13 Jun 2025 15:53:37 -0700 Subject: [PATCH 5/7] why does this work locally and not in the CI? --- spec/support/test_handler.cr | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spec/support/test_handler.cr b/spec/support/test_handler.cr index 9359cf5..bd83b31 100644 --- a/spec/support/test_handler.cr +++ b/spec/support/test_handler.cr @@ -10,6 +10,12 @@ class TestHandler context.response.content_type = "text/html" context.response.print handler.call(context) end + rescue + raise <<-ERROR + Missing Resource #{context.request.resource} in: + + #{routes} + ERROR end def route(path : String, handler : Proc(HTTP::Server::Context, String)) From c790a1b2f5ea185d8cfb4983d671cc35c84f8b8a Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Sun, 15 Jun 2025 17:40:36 -0700 Subject: [PATCH 6/7] no longer need this raise --- spec/support/test_handler.cr | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spec/support/test_handler.cr b/spec/support/test_handler.cr index bd83b31..9359cf5 100644 --- a/spec/support/test_handler.cr +++ b/spec/support/test_handler.cr @@ -10,12 +10,6 @@ class TestHandler context.response.content_type = "text/html" context.response.print handler.call(context) end - rescue - raise <<-ERROR - Missing Resource #{context.request.resource} in: - - #{routes} - ERROR end def route(path : String, handler : Proc(HTTP::Server::Context, String)) From 5b915ac8122220ab8efdf480e2f1d763d3655542 Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Sun, 15 Jun 2025 20:30:52 -0700 Subject: [PATCH 7/7] update webless --- shard.yml | 2 +- spec/support/test_handler.cr | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/shard.yml b/shard.yml index 31e24ed..f1f7d54 100644 --- a/shard.yml +++ b/shard.yml @@ -20,7 +20,7 @@ dependencies: version: ">= 0.4.7, < 0.5" webless: github: crystal-loot/webless - version: ">= 0.1.0, < 0.2" + version: ">= 0.2.0, < 0.3" html5: github: naqvis/crystal-html5 version: ">= 0.5.0, < 0.6" diff --git a/spec/support/test_handler.cr b/spec/support/test_handler.cr index 9359cf5..c2a4894 100644 --- a/spec/support/test_handler.cr +++ b/spec/support/test_handler.cr @@ -6,9 +6,10 @@ class TestHandler if context.request.resource == "/favicon.ico" context.response.print "" else - handler = routes[context.request.resource] - context.response.content_type = "text/html" - context.response.print handler.call(context) + if handler = routes[context.request.resource]? + context.response.content_type = "text/html" + context.response.print handler.call(context) + end end end