Skip to content

Commit 0cdb0be

Browse files
committed
Add support for Asana V1 URLs
1 parent 96984c8 commit 0cdb0be

2 files changed

Lines changed: 38 additions & 17 deletions

File tree

lib/fastlane/plugin/ddg_apple_automation/helper/asana_helper.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ class AsanaHelper # rubocop:disable Metrics/ClassLength
1515
ASANA_API_URL = "https://app.asana.com/api/1.0"
1616
ASANA_TASK_URL_TEMPLATE = "https://app.asana.com/0/0/%s/f"
1717
ASANA_TAG_URL_TEMPLATE = "https://app.asana.com/0/%s/list"
18-
ASANA_TASK_URL_REGEX = %r{https://app.asana.com/[0-9]/[0-9]+/([0-9]+)(:/f)?}
18+
19+
# https://app.asana.com/0/<project_id>/<task_id>
20+
ASANA_V0_TASK_URL_REGEX = %r{https://app.asana.com/0/[0-9]+/([0-9]+)(?:/f)?}
21+
# https://app.asana.com/<url_format_version>/<workspace_id>/<object_name>/<object_id>/<subobject_name>/<subobject_id>
22+
ASANA_V1_TASK_URL_REGEX = %r{https://app.asana.com/1/[0-9]+(?:/[0-9a-z/]*)?/task/([0-9]+)(:?/[0-9a-z/]*)?(?:\?focus=true)?}
23+
1924
ASANA_WORKSPACE_ID = "137249556945"
2025

2126
IOS_HOTFIX_TASK_TEMPLATE_ID = "1209242676101485"
@@ -53,14 +58,14 @@ def self.asana_tag_url(tag_id)
5358
end
5459

5560
def self.extract_asana_task_id(task_url, set_gha_output: true)
56-
if (match = task_url.match(ASANA_TASK_URL_REGEX))
61+
if (match = task_url.match(ASANA_V0_TASK_URL_REGEX)) || (match = task_url.match(ASANA_V1_TASK_URL_REGEX))
5762
task_id = match[1]
5863
if set_gha_output
5964
Helper::GitHubActionsHelper.set_output("asana_task_id", task_id)
6065
end
6166
task_id
6267
else
63-
UI.user_error!("URL has incorrect format (attempted to match #{ASANA_TASK_URL_REGEX})")
68+
UI.user_error!("URL has incorrect format (attempted to match #{ASANA_V0_TASK_URL_REGEX} or #{ASANA_V1_TASK_URL_REGEX})")
6469
end
6570
end
6671

spec/asana_helper_spec.rb

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,40 @@ def asana_task_url(task_id)
1717
end
1818

1919
describe "#extract_asana_task_id" do
20-
it "extracts task ID" do
21-
expect(extract_asana_task_id("https://app.asana.com/0/0/0")).to eq("0")
22-
end
20+
context "v0 task URL" do
21+
it "extracts task ID" do
22+
expect(extract_asana_task_id("https://app.asana.com/0/0/0")).to eq("0")
23+
end
2324

24-
it "extracts task ID when project ID is non-zero" do
25-
expect(extract_asana_task_id("https://app.asana.com/0/753241/9999")).to eq("9999")
26-
end
25+
it "extracts task ID when project ID is non-zero" do
26+
expect(extract_asana_task_id("https://app.asana.com/0/753241/9999")).to eq("9999")
27+
end
2728

28-
it "extracts task ID when first digit is non-zero" do
29-
expect(extract_asana_task_id("https://app.asana.com/4/753241/9999")).to eq("9999")
30-
end
29+
it "extracts long task ID" do
30+
expect(extract_asana_task_id("https://app.asana.com/0/0/12837864576817392")).to eq("12837864576817392")
31+
end
3132

32-
it "extracts long task ID" do
33-
expect(extract_asana_task_id("https://app.asana.com/0/0/12837864576817392")).to eq("12837864576817392")
33+
it "extracts task ID from a URL in focused mode" do
34+
expect(extract_asana_task_id("https://app.asana.com/0/0/1234/f")).to eq("1234")
35+
end
3436
end
3537

36-
it "extracts task ID from a URL with a trailing /f" do
37-
expect(extract_asana_task_id("https://app.asana.com/0/0/1234/f")).to eq("1234")
38+
context "v1 task URL" do
39+
it "extracts task ID" do
40+
expect(extract_asana_task_id("https://app.asana.com/1/1234/project/5678/task/9999")).to eq("9999")
41+
end
42+
43+
it "extracts task ID when project is missing in the URL" do
44+
expect(extract_asana_task_id("https://app.asana.com/1/1234/task/9999")).to eq("9999")
45+
end
46+
47+
it "extracts long task ID" do
48+
expect(extract_asana_task_id("https://app.asana.com/1/1234/task/12837864576817392")).to eq("12837864576817392")
49+
end
50+
51+
it "extracts task ID from a URL in focused mode" do
52+
expect(extract_asana_task_id("https://app.asana.com/1/1234/project/5678/task/9999?focused=true")).to eq("9999")
53+
end
3854
end
3955

4056
it "sets GHA output" do
@@ -46,7 +62,7 @@ def asana_task_url(task_id)
4662

4763
it "fails when garbage is passed" do
4864
expect(Fastlane::UI).to receive(:user_error!)
49-
.with("URL has incorrect format (attempted to match #{Fastlane::Helper::AsanaHelper::ASANA_TASK_URL_REGEX})")
65+
.with("URL has incorrect format (attempted to match #{Fastlane::Helper::AsanaHelper::ASANA_V0_TASK_URL_REGEX} or #{Fastlane::Helper::AsanaHelper::ASANA_V1_TASK_URL_REGEX})")
5066

5167
extract_asana_task_id("not a URL")
5268
end

0 commit comments

Comments
 (0)