Skip to content

Commit 34a6b52

Browse files
authored
Merge pull request #1 from catInWater/uncovered
add uncoverd test
2 parents 0564229 + 866cf55 commit 34a6b52

8 files changed

Lines changed: 122 additions & 0 deletions

File tree

.github/codecov.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
coverage:
2+
status:
3+
patch:
4+
default:
5+
target: 100% # 必须达到 100%
6+
threshold: 0% # 不允许下降

.github/workflows/api.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: API workflow
2+
3+
on: [push, pull_request]
4+
5+
jobs:
6+
build:
7+
runs-on: ubuntu-latest
8+
name: Test python API
9+
steps:
10+
- uses: actions/checkout@v4
11+
- uses: actions/setup-python@v6
12+
with:
13+
python-version: '3.12'
14+
- name: Install requirements
15+
run: pip install -r api/requirements.txt
16+
- name: Run tests and collect coverage
17+
run: pytest --cov=api.calculator --cov-report=xml
18+
- name: Upload coverage reports to Codecov with GitHub Action
19+
uses: codecov/codecov-action@v5
20+
env:
21+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

api/__init__.py

Whitespace-only changes.

api/app.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from flask import (
2+
Flask,
3+
request,
4+
)
5+
6+
from calculator.calculator import Calculator
7+
8+
app = Flask(__name__)
9+
10+
@app.route('/api/add', methods=['POST'])
11+
def add():
12+
return operation('add', 2)
13+
14+
@app.route('/api/subtract', methods=['POST'])
15+
def subtract():
16+
return operation('subtract', 2)
17+
18+
@app.route('/api/multiply', methods=['POST'])
19+
def multiply():
20+
return operation('multiply', 2)
21+
22+
@app.route('/api/divide', methods=['POST'])
23+
def divide():
24+
return operation('divide', 2)
25+
26+
def operation(method, num_factors):
27+
factors = []
28+
if num_factors == 2:
29+
factors.append(float(request.json.get('x')))
30+
factors.append(float(request.json.get('y')))
31+
32+
return str(getattr(Calculator, method)(*factors))
33+
34+
35+
app.run(host='0.0.0.0', port=8080)

api/calculator/__init__.py

Whitespace-only changes.

api/calculator/calculator.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Calculator:
2+
def add(x, y):
3+
return x + y
4+
5+
def subtract(x, y):
6+
return x - y
7+
8+
def multiply(x, y):
9+
return x * y
10+
11+
def divide(x, y):
12+
if y == 0:
13+
return 'Cannot divide by 0'
14+
return x * 1.0 / y

api/calculator/test_calculator.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from .calculator import Calculator
2+
3+
4+
def test_add():
5+
assert Calculator.add(1, 2) == 3.0
6+
assert Calculator.add(1.0, 2.0) == 3.0
7+
assert Calculator.add(0, 2.0) == 2.0
8+
assert Calculator.add(2.0, 0) == 2.0
9+
assert Calculator.add(-4, 2.0) == -2.0
10+
11+
def test_subtract():
12+
assert Calculator.subtract(1, 2) == -1.0
13+
assert Calculator.subtract(2, 1) == 1.0
14+
assert Calculator.subtract(1.0, 2.0) == -1.0
15+
assert Calculator.subtract(0, 2.0) == -2.0
16+
assert Calculator.subtract(2.0, 0.0) == 2.0
17+
assert Calculator.subtract(-4, 2.0) == -6.0
18+
19+
def test_multiply():
20+
assert Calculator.multiply(1, 2) == 2.0
21+
assert Calculator.multiply(1.0, 2.0) == 2.0
22+
assert Calculator.multiply(0, 2.0) == 0.0
23+
assert Calculator.multiply(2.0, 0.0) == 0.0
24+
assert Calculator.multiply(-4, 2.0) == -8.0
25+
26+
def test_divide():
27+
assert Calculator.divide(1, 2) == 0.5
28+
assert Calculator.divide(1.0, 2.0) == 0.5
29+
assert Calculator.divide(0, 2.0) == 0
30+
assert Calculator.divide(-4, 2.0) == -2.0
31+

api/requirements.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
blinker==1.9.0
2+
click==8.3.1
3+
colorama==0.4.6
4+
coverage==7.13.5
5+
Flask==3.1.3
6+
iniconfig==2.3.0
7+
itsdangerous==2.2.0
8+
Jinja2==3.1.6
9+
MarkupSafe==3.0.3
10+
packaging==26.0
11+
pluggy==1.6.0
12+
Pygments==2.19.2
13+
pytest==9.0.2
14+
pytest-cov==7.1.0
15+
Werkzeug==3.1.6

0 commit comments

Comments
 (0)