@@ -18,4 +18,40 @@ defmodule Algora.UtilTest do
1818 assert Util . format_pct ( Decimal . new ( "0.1050" ) ) == "10.5%"
1919 end
2020 end
21+
22+ describe "parse_github_url/1" do
23+ test "parses full GitHub URLs" do
24+ assert Util . parse_github_url ( "https://github.com/owner/repo" ) == { :ok , { "owner" , "repo" } }
25+ assert Util . parse_github_url ( "http://github.com/owner/repo" ) == { :ok , { "owner" , "repo" } }
26+ assert Util . parse_github_url ( "github.com/owner/repo" ) == { :ok , { "owner" , "repo" } }
27+ end
28+
29+ test "parses owner/repo format" do
30+ assert Util . parse_github_url ( "owner/repo" ) == { :ok , { "owner" , "repo" } }
31+ end
32+
33+ test "handles URLs with dashes and underscores" do
34+ assert Util . parse_github_url ( "my-org/my_repo" ) == { :ok , { "my-org" , "my_repo" } }
35+ assert Util . parse_github_url ( "github.com/my-org/my_repo" ) == { :ok , { "my-org" , "my_repo" } }
36+ end
37+
38+ test "handles numeric characters" do
39+ assert Util . parse_github_url ( "owner123/repo456" ) == { :ok , { "owner123" , "repo456" } }
40+ end
41+
42+ test "rejects invalid formats" do
43+ error_msg = "Must be a valid GitHub repository URL (e.g. github.com/owner/repo) or owner/repo format"
44+
45+ assert Util . parse_github_url ( "" ) == { :error , error_msg }
46+ assert Util . parse_github_url ( "invalid" ) == { :error , error_msg }
47+ assert Util . parse_github_url ( "owner" ) == { :error , error_msg }
48+ assert Util . parse_github_url ( "owner/" ) == { :error , error_msg }
49+ assert Util . parse_github_url ( "/repo" ) == { :error , error_msg }
50+ end
51+
52+ test "handles whitespace" do
53+ assert Util . parse_github_url ( " owner/repo " ) == { :ok , { "owner" , "repo" } }
54+ assert Util . parse_github_url ( " github.com/owner/repo " ) == { :ok , { "owner" , "repo" } }
55+ end
56+ end
2157end
0 commit comments