1
0
forked from erp-dev/erp

feat: shipment change && version modelize

This commit is contained in:
2026-07-09 23:03:22 +08:00
parent 36e4bb6de6
commit 48e4782e1e
23 changed files with 947 additions and 36 deletions

View File

@@ -6,6 +6,7 @@ from django.test import TestCase, override_settings
from django.utils import timezone
from rest_framework.test import APIClient
from api_v1.models import AppVersion
from flower.app_version import APP_VERSION_CACHE_KEY
@@ -40,9 +41,84 @@ class AppVersionAPITest(TestCase):
"download_url": "https://example.com/app.apk",
"force": True,
"publish_date": "2026-07-08",
"message": "",
},
)
def test_app_version_api_returns_current_model_version(self):
AppVersion.objects.create(
major=1,
minor=0,
build=100,
download_url="https://example.com/old.apk",
publish_date="2026-07-01",
message="旧版本",
)
AppVersion.objects.create(
major=2,
minor=0,
build=200,
download_url="https://example.com/current.apk",
force=True,
publish_date="2026-07-08",
message="请更新到最新版本",
is_current=True,
)
response = self.client.get("/api/app-version/")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["latest_version"], {"major": 2, "minor": 0, "build": 200})
self.assertEqual(response.data["download_url"], "https://example.com/current.apk")
self.assertEqual(response.data["force"], True)
self.assertEqual(response.data["publish_date"], "2026-07-08")
self.assertEqual(response.data["message"], "请更新到最新版本")
def test_app_version_api_returns_newest_model_version_when_no_current(self):
AppVersion.objects.create(
major=1,
minor=0,
build=100,
download_url="https://example.com/old.apk",
publish_date="2026-07-01",
)
AppVersion.objects.create(
major=1,
minor=1,
build=110,
download_url="https://example.com/new.apk",
publish_date="2026-07-02",
message="最新创建版本",
)
response = self.client.get("/api/app-version/")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["latest_version"], {"major": 1, "minor": 1, "build": 110})
self.assertEqual(response.data["download_url"], "https://example.com/new.apk")
self.assertEqual(response.data["message"], "最新创建版本")
def test_app_version_current_flag_is_mutually_exclusive(self):
first = AppVersion.objects.create(
major=1,
minor=0,
build=100,
download_url="https://example.com/first.apk",
is_current=True,
)
second = AppVersion.objects.create(
major=2,
minor=0,
build=200,
download_url="https://example.com/second.apk",
is_current=True,
)
first.refresh_from_db()
second.refresh_from_db()
self.assertFalse(first.is_current)
self.assertTrue(second.is_current)
def test_set_app_version_command_updates_cached_api_payload_with_defaults(self):
output = StringIO()
call_command(
@@ -65,6 +141,7 @@ class AppVersionAPITest(TestCase):
self.assertEqual(response.data["download_url"], "https://example.com/latest.apk")
self.assertEqual(response.data["force"], False)
self.assertEqual(response.data["publish_date"], timezone.localdate().isoformat())
self.assertEqual(response.data["message"], "")
self.assertIn("'build': 1001", output.getvalue())
def test_set_app_version_command_accepts_force_and_publish_date(self):
@@ -82,6 +159,8 @@ class AppVersionAPITest(TestCase):
"--force",
"--publish-date",
"2026-07-01",
"--message",
"强制升级说明",
stdout=output,
)
@@ -92,3 +171,4 @@ class AppVersionAPITest(TestCase):
self.assertEqual(response.data["download_url"], "https://example.com/force.apk")
self.assertEqual(response.data["force"], True)
self.assertEqual(response.data["publish_date"], "2026-07-01")
self.assertEqual(response.data["message"], "强制升级说明")