Skip to content

Commit 4f4e0ad

Browse files
🔧 add CLI tests
1 parent 1e20516 commit 4f4e0ad

File tree

7 files changed

+271
-5
lines changed

7 files changed

+271
-5
lines changed

.github/workflows/_test-cli.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: CLI Test
2+
3+
on:
4+
workflow_call:
5+
workflow_dispatch:
6+
7+
env:
8+
MINDEE_ENDPOINT_SE_TESTS: ${{ secrets.MINDEE_ENDPOINT_SE_TESTS }}
9+
MINDEE_ACCOUNT_SE_TESTS: ${{ secrets.MINDEE_ACCOUNT_SE_TESTS }}
10+
MINDEE_API_KEY_SE_TESTS: ${{ secrets.MINDEE_API_KEY_SE_TESTS }}
11+
MINDEE_V2_API_KEY: ${{ secrets.MINDEE_V2_SE_TESTS_API_KEY }}
12+
MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }}
13+
MINDEE_V2_SE_TESTS_BLANK_PDF_URL: ${{ secrets.MINDEE_V2_SE_TESTS_BLANK_PDF_URL }}
14+
MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }}
15+
MINDEE_V2_SE_TESTS_CROP_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CROP_MODEL_ID }}
16+
MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID }}
17+
MINDEE_V2_SE_TESTS_OCR_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_OCR_MODEL_ID }}
18+
MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID }}
19+
20+
jobs:
21+
test:
22+
name: Run Tests
23+
timeout-minutes: 30
24+
strategy:
25+
max-parallel: 4
26+
matrix:
27+
os_config:
28+
- os: "ubuntu-24.04"
29+
rid: "linux-x64"
30+
- os: "macos-latest"
31+
rid: "osx-x64"
32+
- os: "windows-latest"
33+
rid: "win-x64"
34+
ruby:
35+
- "3.0"
36+
- "4.0"
37+
runs-on: ${{ matrix.os_config.os }}
38+
steps:
39+
- uses: actions/checkout@v4
40+
with:
41+
submodules: recursive
42+
43+
- name: set up Ruby ${{ matrix.ruby }}
44+
uses: ruby/setup-ruby@v1
45+
with:
46+
ruby-version: ${{ matrix.ruby }}
47+
bundler-cache: true
48+
49+
- name: Tests V2 CLI
50+
run: |
51+
./spec/test_v2_cli.sh ./spec/data/file_types/pdf/blank_1.pdf ${{ matrix.os_config.rid }}
52+
53+
- name: Tests V1 CLI
54+
run: |
55+
./spec/test_v1_cli.sh ./spec/data/file_types/pdf/blank_1.pdf ${{ matrix.os_config.rid }}

.github/workflows/_test-smoke.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@ jobs:
4141
ruby-version: ${{ matrix.ruby }}
4242
bundler-cache: true
4343

44-
- name: Tests V1 code samples
44+
- name: Tests V2 code samples
4545
env:
4646
MINDEE_LOG_LEVEL: DEBUG
4747
run: |
48-
./spec/test_code_samples_v1.sh ${{ secrets.MINDEE_ACCOUNT_SE_TESTS }} ${{ secrets.MINDEE_ENDPOINT_SE_TESTS }}
48+
./spec/test_v2_code_samples.sh
4949
50-
- name: Tests V2 code samples
50+
- name: Tests V1 code samples
5151
env:
5252
MINDEE_LOG_LEVEL: DEBUG
5353
run: |
54-
./spec/test_code_samples_v2.sh
54+
./spec/test_v1_code_samples.sh ${{ secrets.MINDEE_ACCOUNT_SE_TESTS }} ${{ secrets.MINDEE_ENDPOINT_SE_TESTS }}
55+

.github/workflows/cron.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ jobs:
88
test-smoke:
99
uses: mindee/mindee-api-ruby/.github/workflows/_test-smoke.yml@main
1010
secrets: inherit
11+
test-cli:
12+
uses: mindee/mindee-api-ruby/.github/workflows/_test-cli.yml@main
13+
secrets: inherit

.github/workflows/pull-request.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ jobs:
2222
uses: ./.github/workflows/_test-smoke.yml
2323
needs: test-units
2424
secrets: inherit
25+
test-cli:
26+
uses: ./.github/workflows/_test-cli.yml
27+
needs: test-units
28+
secrets: inherit

mindee.gemspec

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ Gem::Specification.new do |spec|
2222
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(.github|spec|features)/}) }
2323
end
2424
spec.bindir = 'bin'
25-
spec.executables = Dir['bin/**/*'].map { |f| File.basename(f) }.reject { |f| f == 'products.rb' }
25+
spec.executables = Dir.children('bin')
26+
.select { |f| File.file?(File.join('bin', f)) }
27+
.reject { |f| f == 'products.rb' }
2628
spec.require_paths = ['lib']
2729

2830
spec.required_ruby_version = Gem::Requirement.new('>= 3.0')

spec/test_v1_cli.sh

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/bin/sh
2+
set -e
3+
4+
# Initialize rbenv
5+
export PATH="$HOME/.rbenv/bin:$PATH"
6+
eval "$($HOME/.rbenv/bin/rbenv init -)"
7+
8+
TEST_FILE=$1
9+
RID=$2
10+
11+
if [ -z "$TEST_FILE" ]; then
12+
echo "Error: no sample file provided"
13+
exit 1
14+
fi
15+
16+
if [ -z "$RID" ]; then
17+
OS_NAME="$(uname -s)"
18+
case "$OS_NAME" in
19+
Linux*) RID="linux-x64" ;;
20+
Darwin*) RID="osx-x64" ;;
21+
CYGWIN*|MINGW*|MSYS*) RID="win-x64" ;;
22+
*)
23+
echo ""
24+
echo "Error: Could not determine default Runtime Identifier (RID) for OS type '$OS_NAME'."
25+
echo "Please provide one manually. Available: 'linux-x64', 'osx-x64', 'win-x64'"
26+
exit 1
27+
;;
28+
esac
29+
echo "Warning: Runtime Identifier (RID) not provided, defaulting to $RID"
30+
fi
31+
32+
WD="$(basename "$PWD")"
33+
if [ "$WD" = "spec" ]; then
34+
CLI_PATH="../bin/mindee.rb"
35+
else
36+
CLI_PATH="./bin/mindee.rb"
37+
fi
38+
39+
if [ "$RID" = "win-x64" ]; then
40+
CLI_PATH="${CLI_PATH}.exe"
41+
fi
42+
43+
PRODUCTS="financial-document receipt invoice invoice-splitter"
44+
PRODUCTS_SIZE=4
45+
i=1
46+
47+
for product in $PRODUCTS
48+
do
49+
echo "--- Test $product with Summary Output ($i/$PRODUCTS_SIZE) ---"
50+
SUMMARY_OUTPUT=$(ruby "$CLI_PATH" v1 "$product" "$TEST_FILE")
51+
echo "$SUMMARY_OUTPUT"
52+
echo ""
53+
echo ""
54+
sleep 0.5
55+
i=$((i + 1))
56+
done

spec/test_v2_cli.sh

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
#!/bin/sh
2+
set -e
3+
4+
TEST_FILE=$1
5+
RID=$2
6+
7+
# Initialize rbenv
8+
export PATH="$HOME/.rbenv/bin:$PATH"
9+
eval "$($HOME/.rbenv/bin/rbenv init -)"
10+
11+
if [ -z "$TEST_FILE" ]; then
12+
echo "Error: no sample file provided"
13+
exit 1
14+
fi
15+
16+
if [ -z "$RID" ]; then
17+
OS_NAME="$(uname -s)"
18+
case "$OS_NAME" in
19+
Linux*) RID="linux-x64" ;;
20+
Darwin*) RID="osx-x64" ;;
21+
CYGWIN*|MINGW*|MSYS*) RID="win-x64" ;;
22+
*)
23+
echo ""
24+
echo "Error: Could not determine default Runtime Identifier (RID) for OS type '$OS_NAME'."
25+
echo "Please provide one manually. Available: 'linux-x64', 'osx-x64', 'win-x64'"
26+
exit 1
27+
;;
28+
esac
29+
echo "Warning: Runtime Identifier (RID) not provided, defaulting to $RID"
30+
fi
31+
32+
WD="$(basename "$PWD")"
33+
if [ "$WD" = "spec" ]; then
34+
CLI_PATH="../bin/mindee.rb"
35+
else
36+
CLI_PATH="./bin/mindee.rb"
37+
fi
38+
39+
echo "--- Test model list retrieval (all models)"
40+
MODELS=$("$CLI_PATH" v2 search-models)
41+
if [ -z "$MODELS" ]; then
42+
echo "Error: no models found"
43+
exit 1
44+
else
45+
echo "Models retrieval OK"
46+
fi
47+
48+
49+
run_search() {
50+
model_type="$1"
51+
52+
echo "--- Test model list retrieval - model_type filter ($model_type models)"
53+
MODELS=$("$CLI_PATH" v2 search-models -t "$model_type")
54+
if [ -z "$MODELS" ]; then
55+
echo "Error: no models found"
56+
exit 1
57+
else
58+
echo "'$MODELS' Models retrieval OK"
59+
fi
60+
sleep 0.5
61+
}
62+
run_search "classification"
63+
run_search "crop"
64+
run_search "extraction"
65+
run_search "ocr"
66+
run_search "split"
67+
68+
echo "--- Test model list retrieval - name filter (non-existent model)"
69+
NO_MODELS=$("$CLI_PATH" v2 search-models -n "supercalifragilisticexpialidocious")
70+
if [ "$NO_MODELS" ]; then
71+
echo "Model shouldn't exist"
72+
exit 1
73+
else
74+
echo "Non-existent models retrieval OK"
75+
fi
76+
77+
78+
echo "--- Test model list retrieval - name filter"
79+
FINDOC_MODELS=$("$CLI_PATH" v2 search-models -n "findoc")
80+
if [ -z "$FINDOC_MODELS" ]; then
81+
echo "Error: no models found"
82+
exit 1
83+
else
84+
echo "Findoc models retrieval OK"
85+
fi
86+
87+
88+
echo "--- Test model list retrieval - name and model_type filter (findoc + extraction)"
89+
FINDOC_MODELS=$("$CLI_PATH" v2 search-models -n "findoc" -t "extraction")
90+
if [ -z "$FINDOC_MODELS" ]; then
91+
echo "Error: no models found"
92+
exit 1
93+
else
94+
echo "Findoc models retrieval OK"
95+
fi
96+
97+
echo "--- Test model list retrieval - model_type filter (invalid models)"
98+
set +e
99+
INVALID_MODELS_OUTPUT=$("$CLI_PATH" v2 search-models -t "invalid" 2>&1)
100+
INVALID_MODELS_STATUS=$?
101+
set -e
102+
103+
if [ "$INVALID_MODELS_STATUS" -eq 0 ]; then
104+
echo "Error: expected search-models to fail with an invalid model type"
105+
exit 1
106+
elif ! echo "$INVALID_MODELS_OUTPUT" | grep -q "HTTP 422"; then
107+
echo "Error: expected HTTP 422 for invalid model type"
108+
echo "$INVALID_MODELS_OUTPUT"
109+
exit 1
110+
else
111+
echo "Error retrieval OK"
112+
fi
113+
114+
115+
116+
117+
118+
MODELS_SIZE=5
119+
i=1
120+
121+
run_test() {
122+
model_id="$1"
123+
model_type="$2"
124+
125+
echo "--- Test $model_type (ID: $model_id) with Summary Output ($i/$MODELS_SIZE) ---"
126+
SUMMARY_OUTPUT=$("$CLI_PATH" v2 "$model_type" -m "$model_id" "$TEST_FILE")
127+
echo "$SUMMARY_OUTPUT"
128+
echo ""
129+
echo ""
130+
sleep 0.5
131+
132+
i=$((i + 1))
133+
}
134+
135+
echo "--- Test URL file $MINDEE_V2_SE_TESTS_BLANK_PDF_URL ---"
136+
SUMMARY_OUTPUT=$("$CLI_PATH" v2 "extraction" -m "$MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID" "$MINDEE_V2_SE_TESTS_BLANK_PDF_URL")
137+
echo "$SUMMARY_OUTPUT"
138+
echo ""
139+
echo ""
140+
141+
run_test "$MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID" "classification"
142+
run_test "$MINDEE_V2_SE_TESTS_CROP_MODEL_ID" "crop"
143+
run_test "$MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID" "extraction"
144+
run_test "$MINDEE_V2_SE_TESTS_OCR_MODEL_ID" "ocr"
145+
run_test "$MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID" "split"

0 commit comments

Comments
 (0)