1
1
from typing import Optional
2
2
3
+ import httpx
3
4
import pytest
4
5
from fastapi import FastAPI , HTTPException
5
6
from httpx import AsyncClient
6
7
from starlette .responses import JSONResponse
7
8
8
9
from ops2deb .exceptions import Ops2debUpdaterError
9
10
from ops2deb .logger import enable_debug
10
- from ops2deb .updater import GenericUpdateStrategy , GithubUpdateStrategy
11
+ from ops2deb .updater import (
12
+ BaseUpdateStrategy ,
13
+ GenericUpdateStrategy ,
14
+ GithubUpdateStrategy ,
15
+ )
11
16
12
17
enable_debug (True )
13
18
@@ -47,6 +52,23 @@ def github_release_api():
47
52
return _github_app_factory
48
53
49
54
55
+ async def test_try_version__returns_false_when_fetch_url_does_not_depend_on_the_blueprint_version ( # noqa: E501
56
+ blueprint_factory ,
57
+ ):
58
+ # Given
59
+ blueprint = blueprint_factory (
60
+ version = "1.0.0" ,
61
+ fetch = "http://test/releases/1.0.0/some-app.tar.gz" ,
62
+ )
63
+ update_strategy = BaseUpdateStrategy (httpx .AsyncClient ())
64
+
65
+ # When
66
+ result = await update_strategy .try_version (blueprint , "2.0.0" )
67
+
68
+ # Then
69
+ assert result is False
70
+
71
+
50
72
@pytest .mark .parametrize (
51
73
"versions,expected_result" ,
52
74
[
@@ -60,16 +82,42 @@ def github_release_api():
60
82
(["1.0.0" , "1.0.1" , "1.0.2" , "1.1.0" , "1.1.1" ], "1.1.1" ),
61
83
],
62
84
)
63
- async def test_generic_update_strategy_should_find_expected_blueprint_release (
85
+ async def test_generic_update_strategy_finds_latest_release_version (
64
86
blueprint_factory , app_factory , versions , expected_result
65
87
):
88
+ # Given
66
89
blueprint = blueprint_factory (
90
+ version = "1.0.0" ,
67
91
fetch = "http://test/releases/{{version}}/some-app.tar.gz" ,
68
92
)
69
93
app = app_factory (versions )
94
+
95
+ # When
96
+ async with AsyncClient (app = app ) as client :
97
+ update_strategy = GenericUpdateStrategy (client )
98
+ latest_version = await update_strategy (blueprint )
99
+
100
+ # Then
101
+ assert latest_version == expected_result
102
+
103
+
104
+ async def test_generic_update_strategy_finds_latest_release_version_when_version_has_prerelease_part ( # noqa: E501
105
+ blueprint_factory , app_factory
106
+ ):
107
+ # Given
108
+ blueprint = blueprint_factory (
109
+ version = "1.0.0-pre" ,
110
+ fetch = "http://test/releases/{{version}}/some-app.tar.gz" ,
111
+ )
112
+ app = app_factory (["2.0.0" ])
113
+
114
+ # When
70
115
async with AsyncClient (app = app ) as client :
71
116
update_strategy = GenericUpdateStrategy (client )
72
- assert await update_strategy (blueprint ) == expected_result
117
+ latest_version = await update_strategy (blueprint )
118
+
119
+ # Then
120
+ assert latest_version == "2.0.0"
73
121
74
122
75
123
@pytest .mark .parametrize (
0 commit comments