Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit198d508

Browse files
committed
impl: add UTs for installed IDEs filtering
1 parent1c2ae9f commit198d508

File tree

1 file changed

+336
-0
lines changed

1 file changed

+336
-0
lines changed

‎src/test/kotlin/com/coder/gateway/models/WorkspaceProjectIDETest.kt

Lines changed: 336 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
packagecom.coder.gateway.models
22

3+
importcom.jetbrains.gateway.ssh.AvailableIde
4+
importcom.jetbrains.gateway.ssh.Download
5+
importcom.jetbrains.gateway.ssh.InstalledIdeUIEx
6+
importcom.jetbrains.gateway.ssh.IntelliJPlatformProduct
7+
importcom.jetbrains.gateway.ssh.IntelliJPlatformProduct.GOIDE
8+
importcom.jetbrains.gateway.ssh.IntelliJPlatformProduct.IDEA
9+
importcom.jetbrains.gateway.ssh.IntelliJPlatformProduct.IDEA_IC
10+
importcom.jetbrains.gateway.ssh.IntelliJPlatformProduct.PYCHARM
11+
importcom.jetbrains.gateway.ssh.IntelliJPlatformProduct.RUBYMINE
12+
importcom.jetbrains.gateway.ssh.IntelliJPlatformProduct.RUSTROVER
13+
importcom.jetbrains.gateway.ssh.ReleaseType
14+
importcom.jetbrains.gateway.ssh.ReleaseType.EAP
15+
importcom.jetbrains.gateway.ssh.ReleaseType.NIGHTLY
16+
importcom.jetbrains.gateway.ssh.ReleaseType.PREVIEW
17+
importcom.jetbrains.gateway.ssh.ReleaseType.RC
18+
importcom.jetbrains.gateway.ssh.ReleaseType.RELEASE
19+
importorg.junit.jupiter.api.DisplayName
320
importjava.net.URL
421
importkotlin.test.Test
522
importkotlin.test.assertContains
@@ -125,4 +142,323 @@ internal class WorkspaceProjectIDETest {
125142
},
126143
)
127144
}
145+
146+
@Test
147+
@DisplayName("test that installed IDEs filter returns an empty list when there are available IDEs but none are installed")
148+
funtestFilterOutWhenNoIdeIsInstalledButAvailableIsPopulated() {
149+
assertEquals(
150+
emptyList(), emptyList<InstalledIdeUIEx>().filterOutAvailableReleasedIdes(
151+
listOf(
152+
availableIde(IDEA,"242.23726.43",EAP),
153+
availableIde(IDEA_IC,"251.23726.43",RELEASE)
154+
)
155+
)
156+
)
157+
}
158+
159+
@Test
160+
@DisplayName("test that unreleased installed IDEs are not filtered out when available list of IDEs is empty")
161+
funtestFilterOutAvailableReleaseIdesWhenAvailableIsEmpty() {
162+
// given an eap installed ide
163+
val installedEAPs=listOf(installedIde(IDEA,"242.23726.43",EAP))
164+
165+
// expect
166+
assertEquals(installedEAPs, installedEAPs.filterOutAvailableReleasedIdes(emptyList()))
167+
168+
// given an RC installed ide
169+
val installedRCs=listOf(installedIde(RUSTROVER,"243.63726.48",RC))
170+
171+
// expect
172+
assertEquals(installedRCs, installedRCs.filterOutAvailableReleasedIdes(emptyList()))
173+
174+
// given a preview installed ide
175+
val installedPreviews=listOf(installedIde(IDEA_IC,"244.63726.48",ReleaseType.PREVIEW))
176+
177+
// expect
178+
assertEquals(installedPreviews, installedPreviews.filterOutAvailableReleasedIdes(emptyList()))
179+
180+
// given a nightly installed ide
181+
val installedNightlys=listOf(installedIde(RUBYMINE,"244.63726.48",NIGHTLY))
182+
183+
// expect
184+
assertEquals(installedNightlys, installedNightlys.filterOutAvailableReleasedIdes(emptyList()))
185+
}
186+
187+
@Test
188+
@DisplayName("test that unreleased EAP ides are superseded by available RELEASED ides with the same or higher build number")
189+
funtestUnreleasedAndInstalledEAPIdesAreSupersededByAvailableReleasedWithSameOrHigherBuildNr() {
190+
// given an eap installed ide
191+
val installedEapIdea= installedIde(IDEA,"242.23726.43",EAP)
192+
val installedReleasedRustRover= installedIde(RUSTROVER,"251.55667.23",RELEASE)
193+
// and a released idea with same build number
194+
val availableReleasedIdeaWithSameBuild= availableIde(IDEA,"242.23726.43",RELEASE)
195+
196+
// expect the installed eap idea to be filtered out
197+
assertEquals(
198+
listOf(installedReleasedRustRover),
199+
listOf(installedEapIdea, installedReleasedRustRover).filterOutAvailableReleasedIdes(
200+
listOf(
201+
availableReleasedIdeaWithSameBuild
202+
)
203+
)
204+
)
205+
206+
// given a released idea with higher build number
207+
val availableIdeaWithHigherBuild= availableIde(IDEA,"243.21726.43",RELEASE)
208+
209+
// expect the installed eap idea to be filtered out
210+
assertEquals(
211+
listOf(installedReleasedRustRover),
212+
listOf(installedEapIdea, installedReleasedRustRover).filterOutAvailableReleasedIdes(
213+
listOf(
214+
availableIdeaWithHigherBuild
215+
)
216+
)
217+
)
218+
}
219+
220+
@Test
221+
@DisplayName("test that unreleased RC ides are superseded by available RELEASED ides with the same or higher build number")
222+
funtestUnreleasedAndInstalledRCIdesAreSupersededByAvailableReleasedWithSameOrHigherBuildNr() {
223+
// given an RC installed ide
224+
val installedRCRustRover= installedIde(RUSTROVER,"242.23726.43",RC)
225+
val installedReleasedGoLand= installedIde(GOIDE,"251.55667.23",RELEASE)
226+
// and a released idea with same build number
227+
val availableReleasedRustRoverWithSameBuild= availableIde(RUSTROVER,"242.23726.43",RELEASE)
228+
229+
// expect the installed RC rust rover to be filtered out
230+
assertEquals(
231+
listOf(installedReleasedGoLand),
232+
listOf(installedRCRustRover, installedReleasedGoLand).filterOutAvailableReleasedIdes(
233+
listOf(
234+
availableReleasedRustRoverWithSameBuild
235+
)
236+
)
237+
)
238+
239+
// given a released rust rover with higher build number
240+
val availableRustRoverWithHigherBuild= availableIde(RUSTROVER,"243.21726.43",RELEASE)
241+
242+
// expect the installed RC rust rover to be filtered out
243+
assertEquals(
244+
listOf(installedReleasedGoLand),
245+
listOf(installedRCRustRover, installedReleasedGoLand).filterOutAvailableReleasedIdes(
246+
listOf(
247+
availableRustRoverWithHigherBuild
248+
)
249+
)
250+
)
251+
}
252+
253+
@Test
254+
@DisplayName("test that unreleased PREVIEW ides are superseded by available RELEASED ides with the same or higher build number")
255+
funtestUnreleasedAndInstalledPreviewIdesAreSupersededByAvailableReleasedWithSameOrHigherBuildNr() {
256+
// given a PREVIEW installed ide
257+
val installedPreviewRubyMine= installedIde(RUBYMINE,"242.23726.43",PREVIEW)
258+
val installedReleasedIntelliJCommunity= installedIde(IDEA_IC,"251.55667.23",RELEASE)
259+
// and a released ruby mine with same build number
260+
val availableReleasedRubyMineWithSameBuild= availableIde(RUBYMINE,"242.23726.43",RELEASE)
261+
262+
// expect the installed PREVIEW idea to be filtered out
263+
assertEquals(
264+
listOf(installedReleasedIntelliJCommunity),
265+
listOf(installedPreviewRubyMine, installedReleasedIntelliJCommunity).filterOutAvailableReleasedIdes(
266+
listOf(
267+
availableReleasedRubyMineWithSameBuild
268+
)
269+
)
270+
)
271+
272+
// given a released ruby mine with higher build number
273+
val availableRubyMineWithHigherBuild= availableIde(RUBYMINE,"243.21726.43",RELEASE)
274+
275+
// expect the installed PREVIEW ruby mine to be filtered out
276+
assertEquals(
277+
listOf(installedReleasedIntelliJCommunity),
278+
listOf(installedPreviewRubyMine, installedReleasedIntelliJCommunity).filterOutAvailableReleasedIdes(
279+
listOf(
280+
availableRubyMineWithHigherBuild
281+
)
282+
)
283+
)
284+
}
285+
286+
@Test
287+
@DisplayName("test that unreleased NIGHTLY ides are superseded by available RELEASED ides with the same or higher build number")
288+
funtestUnreleasedAndInstalledNightlyIdesAreSupersededByAvailableReleasedWithSameOrHigherBuildNr() {
289+
// given a NIGHTLY installed ide
290+
val installedNightlyPyCharm= installedIde(PYCHARM,"242.23726.43",NIGHTLY)
291+
val installedReleasedRubyMine= installedIde(RUBYMINE,"251.55667.23",RELEASE)
292+
// and a released pycharm with same build number
293+
val availableReleasedPyCharmWithSameBuild= availableIde(PYCHARM,"242.23726.43",RELEASE)
294+
295+
// expect the installed NIGHTLY pycharm to be filtered out
296+
assertEquals(
297+
listOf(installedReleasedRubyMine),
298+
listOf(installedNightlyPyCharm, installedReleasedRubyMine).filterOutAvailableReleasedIdes(
299+
listOf(
300+
availableReleasedPyCharmWithSameBuild
301+
)
302+
)
303+
)
304+
305+
// given a released pycharm with higher build number
306+
val availablePyCharmWithHigherBuild= availableIde(PYCHARM,"243.21726.43",RELEASE)
307+
308+
// expect the installed NIGHTLY pycharm to be filtered out
309+
assertEquals(
310+
listOf(installedReleasedRubyMine),
311+
listOf(installedNightlyPyCharm, installedReleasedRubyMine).filterOutAvailableReleasedIdes(
312+
listOf(
313+
availablePyCharmWithHigherBuild
314+
)
315+
)
316+
)
317+
}
318+
319+
@Test
320+
@DisplayName("test that unreleased installed ides are NOT superseded by available unreleased IDEs with higher build numbers")
321+
funtestUnreleasedIdesAreNotSupersededByAvailableUnreleasedIdesWithHigherBuildNr() {
322+
// given installed and unreleased ides
323+
val installedEap=listOf(installedIde(RUSTROVER,"203.87675.5",EAP))
324+
val installedRC=listOf(installedIde(RUSTROVER,"203.87675.5",RC))
325+
val installedPreview=listOf(installedIde(RUSTROVER,"203.87675.5",PREVIEW))
326+
val installedNightly=listOf(installedIde(RUSTROVER,"203.87675.5",NIGHTLY))
327+
328+
// and available unreleased ides
329+
val availableHigherAndUnreleasedIdes=listOf(
330+
availableIde(RUSTROVER,"204.34567.1",EAP),
331+
availableIde(RUSTROVER,"205.45678.2",RC),
332+
availableIde(RUSTROVER,"206.24667.3",PREVIEW),
333+
availableIde(RUSTROVER,"207.24667.4",NIGHTLY),
334+
)
335+
336+
assertEquals(
337+
installedEap,
338+
installedEap.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
339+
)
340+
assertEquals(
341+
installedRC,
342+
installedRC.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
343+
)
344+
assertEquals(
345+
installedPreview,
346+
installedPreview.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
347+
)
348+
assertEquals(
349+
installedNightly,
350+
installedNightly.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
351+
)
352+
}
353+
354+
@Test
355+
@DisplayName("test that unreleased installed ides are NOT superseded by available unreleased IDEs with same major number but higher minor build numbers")
356+
funtestUnreleasedIdesAreNotSupersededByAvailableUnreleasedIdesWithSameMajorButHigherMinorBuildNr() {
357+
// given installed and unreleased ides
358+
val installedEap=listOf(installedIde(RUSTROVER,"203.12345.5",EAP))
359+
val installedRC=listOf(installedIde(RUSTROVER,"203.12345.5",RC))
360+
val installedPreview=listOf(installedIde(RUSTROVER,"203.12345.5",PREVIEW))
361+
val installedNightly=listOf(installedIde(RUSTROVER,"203.12345.5",NIGHTLY))
362+
363+
// and available unreleased ides
364+
val availableHigherAndUnreleasedIdes=listOf(
365+
availableIde(RUSTROVER,"203.34567.1",EAP),
366+
availableIde(RUSTROVER,"203.45678.2",RC),
367+
availableIde(RUSTROVER,"203.24667.3",PREVIEW),
368+
availableIde(RUSTROVER,"203.24667.4",NIGHTLY),
369+
)
370+
371+
assertEquals(
372+
installedEap,
373+
installedEap.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
374+
)
375+
assertEquals(
376+
installedRC,
377+
installedRC.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
378+
)
379+
assertEquals(
380+
installedPreview,
381+
installedPreview.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
382+
)
383+
assertEquals(
384+
installedNightly,
385+
installedNightly.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
386+
)
387+
}
388+
389+
@Test
390+
@DisplayName("test that unreleased installed ides are NOT superseded by available unreleased IDEs with same major and minor number but higher patch numbers")
391+
funtestUnreleasedIdesAreNotSupersededByAvailableUnreleasedIdesWithSameMajorAndMinorButHigherPatchNr() {
392+
// given installed and unreleased ides
393+
val installedEap=listOf(installedIde(RUSTROVER,"203.12345.1",EAP))
394+
val installedRC=listOf(installedIde(RUSTROVER,"203.12345.1",RC))
395+
val installedPreview=listOf(installedIde(RUSTROVER,"203.12345.1",PREVIEW))
396+
val installedNightly=listOf(installedIde(RUSTROVER,"203.12345.1",NIGHTLY))
397+
398+
// and available unreleased ides
399+
val availableHigherAndUnreleasedIdes=listOf(
400+
availableIde(RUSTROVER,"203.12345.2",EAP),
401+
availableIde(RUSTROVER,"203.12345.3",RC),
402+
availableIde(RUSTROVER,"203.12345.4",PREVIEW),
403+
availableIde(RUSTROVER,"203.12345.5",NIGHTLY),
404+
)
405+
406+
assertEquals(
407+
installedEap,
408+
installedEap.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
409+
)
410+
assertEquals(
411+
installedRC,
412+
installedRC.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
413+
)
414+
assertEquals(
415+
installedPreview,
416+
installedPreview.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
417+
)
418+
assertEquals(
419+
installedNightly,
420+
installedNightly.filterOutAvailableReleasedIdes(availableHigherAndUnreleasedIdes)
421+
)
422+
}
423+
424+
companionobject {
425+
privateval fakeDownload=Download(
426+
"https://download.jetbrains.com/idea/ideaIU-2024.1.7.tar.gz",
427+
1328462259,
428+
"https://download.jetbrains.com/idea/ideaIU-2024.1.7.tar.gz.sha256"
429+
)
430+
431+
privatefuninstalledIde(
432+
product:IntelliJPlatformProduct,
433+
buildNumber:String,
434+
releaseType:ReleaseType
435+
):InstalledIdeUIEx {
436+
returnInstalledIdeUIEx(
437+
product,
438+
buildNumber,
439+
"/home/coder/.cache/JetBrains/",
440+
toPresentableVersion(buildNumber)+""+ releaseType.toString()
441+
)
442+
}
443+
444+
privatefunavailableIde(
445+
product:IntelliJPlatformProduct,
446+
buildNumber:String,
447+
releaseType:ReleaseType
448+
):AvailableIde {
449+
returnAvailableIde(
450+
product,
451+
buildNumber,
452+
fakeDownload,
453+
toPresentableVersion(buildNumber)+""+ releaseType.toString(),
454+
null,
455+
releaseType
456+
)
457+
}
458+
459+
privatefuntoPresentableVersion(buildNr:String):String {
460+
461+
return"20"+ buildNr.substring(0,2)+"."+ buildNr.substring(2,3)
462+
}
463+
}
128464
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp