Coverage for tests/test_model.py: 97%

74 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-04-24 11:13 +0000

1from extension_catalog_model import VersionRange, Release, Extension, Catalog 

2import pytest 

3 

4def test_version_ranges_can_be_created(): 

5 v1 = VersionRange(min="v0.1.0") 

6 v2 = VersionRange(min="v0.1.0", max="v0.2.0") 

7 

8def test_version_ranges_cant_be_disordered(): 

9 with pytest.raises(Exception): 

10 VersionRange(min="v0.2.0", max="v0.1.0") 

11 

12def test_version_excludes_cant_be_too_high(): 

13 with pytest.raises(Exception): 

14 VersionRange(min="v0.2.0", max="v0.3.0", excludes=["v0.6.0"]) 

15 

16def test_version_excludes_cant_be_too_low(): 

17 with pytest.raises(Exception): 

18 VersionRange(min="v0.2.0", max="v0.3.0", excludes=["v0.1.0"]) 

19 

20def test_release_can_be_created(): 

21 Release(name="v0.1.0", main_url="https://github.com/a/b/", version_range = VersionRange()) 

22 

23def test_release_name(): 

24 with pytest.raises(Exception): 

25 Release(name="blah", main_url="https://github.com/a/b/", version_range = VersionRange()) 

26 

27def test_release_name_v(): 

28 with pytest.raises(Exception): 

29 Release(name="0.1.0", main_url="https://github.com/a/b/", version_range = VersionRange()) 

30 

31 

32def test_release_needs_url(): 

33 with pytest.raises(Exception): 

34 Release(name="v0.1.0", version_range=VersionRange()) 

35 

36def test_release_url_must_match(): 

37 with pytest.raises(Exception): 

38 Release(name="v0.1.0", main_url="https://github.com/", version_range=VersionRange()) 

39 

40def test_release_url_cant_be_gl(): 

41 with pytest.raises(Exception): 

42 Release(name="v0.1.0", main_url="https://gitlab.com/a/b/", version_range=VersionRange()) 

43 

44def test_required_deps_scijava(): 

45 Release( 

46 name="v0.1.0", 

47 main_url="https://github.com/a/b/", 

48 required_dependency_urls=["https://maven.scijava.org/content/repositories/snapshots/io/github/qupath/qupath-extension-py4j/0.1.0-SNAPSHOT/qupath-extension-py4j-0.1.0-20241021.201937-1-all.jar"], 

49 version_range=VersionRange()) 

50 

51def test_required_deps_maven(): 

52 Release( 

53 name="v0.1.0", 

54 main_url="https://github.com/a/b/", 

55 required_dependency_urls=["https://repo1.maven.org/maven2/org/webjars/ace/04.09.2013/ace-04.09.2013.jar"], 

56 version_range=VersionRange()) 

57 

58def test_release_needs_versions(): 

59 with pytest.raises(Exception): 

60 Release(name="v0.1.0", main_url="https://github.com/a/b") 

61 

62def test_required_deps_gh(): 

63 Release( 

64 name="v0.1.0", 

65 main_url="https://github.com/a/b/", 

66 required_dependency_urls=["https://github.com/a/b/"], 

67 version_range=VersionRange()) 

68 

69def test_required_deps_cant_be_gl(): 

70 with pytest.raises(Exception): 

71 Release( 

72 name="v0.1.0", 

73 main_url="https://github.com/a/b/", 

74 required_dependency_urls=["https://gitlab.com/a/b/"], 

75 version_range=VersionRange()) 

76 

77def test_optional_deps(): 

78 Release( 

79 name="v0.1.0", 

80 main_url="https://github.com/a/b/", 

81 optional_dependency_urls=["https://github.com/a/b/"], 

82 version_range=VersionRange()) 

83 

84def test_optional_deps_cant_be_gl(): 

85 with pytest.raises(Exception): 

86 Release( 

87 name="v0.1.0", 

88 main_url="https://github.com/a/b/", 

89 optional_dependency_urls=["https://gitlab.com/a/b/"], 

90 version_range=VersionRange()) 

91 

92def test_optional_deps_scijava(): 

93 Release( 

94 name="v0.1.0", 

95 main_url="https://github.com/a/b/", 

96 optional_dependency_urls=["https://maven.scijava.org/content/repositories/snapshots/io/github/qupath/qupath-extension-py4j/0.1.0-SNAPSHOT/qupath-extension-py4j-0.1.0-20241021.201937-1-all.jar"], 

97 version_range=VersionRange()) 

98 

99def test_optional_deps_maven(): 

100 Release( 

101 name="v0.1.0", 

102 main_url="https://github.com/a/b/", 

103 optional_dependency_urls=["https://repo1.maven.org/maven2/org/webjars/ace/04.09.2013/ace-04.09.2013.jar"], 

104 version_range=VersionRange()) 

105 

106def test_javadoc_urls(): 

107 Release( 

108 name="v0.1.0", 

109 main_url="https://github.com/a/b/", 

110 javadoc_urls=["https://github.com/a/b/"], 

111 version_range=VersionRange()) 

112 

113def test_javadoc_urls_cant_be_gl(): 

114 with pytest.raises(Exception): 

115 Release( 

116 name="v0.1.0", 

117 main_url="https://github.com/a/b/", 

118 javadoc_urls=["https://gitlab.com/a/b/"], 

119 version_range=VersionRange()) 

120 

121def test_optional_deps_scijava(): 

122 Release( 

123 name="v0.1.0", 

124 main_url="https://github.com/a/b/", 

125 javadoc_urls=["https://maven.scijava.org/content/repositories/snapshots/io/github/qupath/qupath-extension-py4j/0.1.0-SNAPSHOT/qupath-extension-py4j-0.1.0-20241021.201937-1-all.jar"], 

126 version_range=VersionRange()) 

127 

128def test_optional_deps_maven(): 

129 Release( 

130 name="v0.1.0", 

131 main_url="https://github.com/a/b/", 

132 javadoc_urls=["https://repo1.maven.org/maven2/org/webjars/ace/04.09.2013/ace-04.09.2013.jar"], 

133 version_range=VersionRange()) 

134 

135 

136def test_extension_creation(): 

137 Extension( 

138 name="my-extension", 

139 description="My extension", 

140 author="Me", 

141 homepage="https://github.com/a/b", 

142 releases = [ 

143 Release( 

144 name="v0.1.0", 

145 main_url="https://github.com/a/b/", 

146 version_range=VersionRange() 

147 ) 

148 ] 

149 ) 

150 

151def test_extension_homepage_validation(): 

152 with pytest.raises(Exception): 

153 Extension( 

154 name="my-extension", 

155 description="My extension", 

156 author="Me", 

157 homepage="https://github.com/", 

158 releases = [ 

159 Release( 

160 name="v0.1.0", 

161 main_url="https://github.com/a/b/", 

162 version_range=VersionRange() 

163 ) 

164 ] 

165 ) 

166 

167def test_extension_homepage_must_be_gh(): 

168 with pytest.raises(Exception): 

169 Extension( 

170 name="my-extension", 

171 description="My extension", 

172 author="Me", 

173 homepage="https://gitlab.com/a/b", 

174 releases = [ 

175 Release( 

176 name="v0.1.0", 

177 main_url="https://github.com/a/b/", 

178 version_range=VersionRange() 

179 ) 

180 ] 

181 ) 

182 

183def test_catalog_creation(): 

184 Catalog( 

185 name="My catalog", 

186 description="My description", 

187 extensions = [ 

188 Extension( 

189 name="my-extension", 

190 description="My extension", 

191 author="Me", 

192 homepage="https://github.com/a/b", 

193 releases = [ 

194 Release( 

195 name="v0.1.0", 

196 main_url="https://github.com/a/b/", 

197 version_range=VersionRange() 

198 ) 

199 ] 

200 ) 

201 ] 

202 ) 

203 

204def test_catalog_cannot_have_duplicate_names(): 

205 with pytest.raises(Exception): 

206 Catalog( 

207 name="My catalog", 

208 description="My description", 

209 extensions = [ 

210 Extension( 

211 name="my-extension", 

212 description="My extension", 

213 author="Me", 

214 homepage="https://github.com/a/b", 

215 releases = [ 

216 Release( 

217 name="v0.1.0", 

218 main_url="https://github.com/a/b/", 

219 version_range=VersionRange() 

220 ) 

221 ] 

222 ), 

223 Extension( 

224 name="my-extension", 

225 description="My extension", 

226 author="Me", 

227 homepage="https://github.com/a/b", 

228 releases = [ 

229 Release( 

230 name="v0.1.0", 

231 main_url="https://github.com/a/b/", 

232 version_range=VersionRange() 

233 ) 

234 ] 

235 ) 

236 ] 

237 )