Skip to content

Commit 26b6bf1

Browse files
committed
Add update tests
1 parent 6a34d63 commit 26b6bf1

File tree

8 files changed

+455
-11
lines changed

8 files changed

+455
-11
lines changed

src/main/java/org/hydev/mcpm/client/DatabaseManager.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public SearchPackagesResult getSearchResult(InstallInput input) {
4444
* @param pluginName The version of the installed plugin
4545
* */
4646
public boolean checkPluginInstalledByName(String pluginName) {
47+
if (!localPluginTracker.findIfInLockByName(pluginName)) {
48+
return false;
49+
}
50+
4751
List<PluginYml> pluginInstalled = localPluginTracker.listInstalled();
4852
for (PluginYml pluginYml : pluginInstalled) {
4953
if (pluginYml != null && pluginYml.name() != null && pluginYml.name().equals(pluginName)) {
@@ -65,7 +69,8 @@ public boolean checkPluginInstalledByVersion(PluginVersion pluginVersion) {
6569
for (PluginYml pluginYml : pluginInstalled) {
6670
if (pluginYml != null && pluginYml.version() != null &&
6771
pluginYml.version().equals(version)) {
68-
return true;
72+
// Yes, if it is not in the plugin tracker lock file, we ignore.
73+
return localPluginTracker.findIfInLockByName(pluginYml.name());
6974
}
7075
}
7176
return false;

src/main/java/org/hydev/mcpm/client/updater/UpdateInteractor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.hydev.mcpm.client.updater;
22

33
import org.hydev.mcpm.client.commands.presenters.InstallResultPresenter;
4+
import org.hydev.mcpm.client.database.tracker.PluginTracker;
45
import org.hydev.mcpm.client.installer.InstallBoundary;
56
import org.hydev.mcpm.client.installer.input.InstallInput;
6-
import org.hydev.mcpm.client.local.LocalPluginTracker;
77
import org.hydev.mcpm.client.matcher.PluginModelId;
88
import org.hydev.mcpm.client.matcher.PluginVersionId;
99
import org.hydev.mcpm.client.matcher.PluginVersionState;
@@ -30,7 +30,7 @@
3030
public record UpdateInteractor(
3131
CheckForUpdatesBoundary checkBoundary,
3232
InstallBoundary installer,
33-
LocalPluginTracker pluginTracker
33+
PluginTracker pluginTracker
3434
) implements UpdateBoundary {
3535
@Nullable
3636
private PluginVersionState stateByName(Map<String, PluginYml> installed, String name) {
@@ -52,7 +52,7 @@ private Map<String, PluginVersionState> stateMapByNames(List<String> names) {
5252
.collect(Pair.toMap());
5353

5454
return names.stream()
55-
.map(name -> new Pair<>(name, stateByName(installed, name)))
55+
.map(name -> Pair.of(name, stateByName(installed, name)))
5656
.filter(pair -> pair.getValue() != null)
5757
.collect(Collectors.toMap(Pair::getKey, Pair::getValue));
5858
}
@@ -101,7 +101,7 @@ private UpdateOutcome makeOutcome(@Nullable PluginVersionState state, CheckForUp
101101
InstallResultPresenter installResultPresenter) {
102102
// E.g. was filtered in stateMapByNames since there was no associated version.
103103
if (state == null) {
104-
defaultOutcomeFor(null, NOT_INSTALLED);
104+
return defaultOutcomeFor(null, NOT_INSTALLED);
105105
}
106106

107107
if (result.mismatched().contains(state)) {

src/test/java/org/hydev/mcpm/client/database/CheckForUpdatesInteractorTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ public static void setup() {
4747

4848
smallInteractor = interactor(List.of(
4949
PluginMockFactory.model(1),
50-
PluginMockFactory.model(2, "name", null, List.of("ver.1", "ver.2"), null),
51-
PluginMockFactory.model(3, "test", null, List.of("update", "update update"), null),
52-
PluginMockFactory.model(4, "test", null, List.of("1.0", "2.0", "3.0"), null)
50+
PluginMockFactory.model(2, "name", List.of("ver.1", "ver.2")),
51+
PluginMockFactory.model(3, "test", List.of("update", "update update")),
52+
PluginMockFactory.model(4, "test", List.of("1.0", "2.0", "3.0"))
5353
));
5454
}
5555

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.hydev.mcpm.client.database;
2+
3+
import org.hydev.mcpm.client.commands.presenters.InstallResultPresenter;
4+
import org.hydev.mcpm.client.database.tracker.PluginTracker;
5+
import org.hydev.mcpm.client.installer.InstallBoundary;
6+
import org.hydev.mcpm.client.installer.input.InstallInput;
7+
import org.hydev.mcpm.client.models.PluginModel;
8+
import org.hydev.mcpm.client.models.PluginVersion;
9+
import org.hydev.mcpm.client.search.SearchPackagesType;
10+
import org.junit.jupiter.api.Assertions;
11+
12+
import java.util.HashSet;
13+
import java.util.List;
14+
import java.util.Set;
15+
16+
public class MockInstaller implements InstallBoundary {
17+
private final List<PluginModel> plugins;
18+
private final PluginTracker tracker;
19+
private final boolean defaultResult;
20+
private final Set<String> requested = new HashSet<>();
21+
22+
public MockInstaller(List<PluginModel> plugins, PluginTracker tracker) {
23+
this(plugins, tracker, true);
24+
}
25+
26+
public MockInstaller(List<PluginModel> plugins, PluginTracker tracker, boolean defaultResult) {
27+
this.plugins = plugins;
28+
this.tracker = tracker;
29+
this.defaultResult = defaultResult;
30+
}
31+
32+
@Override
33+
public boolean installPlugin(InstallInput installInput, InstallResultPresenter resultPresenter) {
34+
Assertions.assertEquals(installInput.type(), SearchPackagesType.BY_NAME);
35+
36+
if (tracker.findIfInLockByName(installInput.name()))
37+
return false;
38+
39+
var model = plugins.stream()
40+
.filter(plugin -> plugin.getLatestPluginVersion()
41+
.map(x -> x.meta() != null && installInput.name().equals(x.meta().name()))
42+
.orElse(false)
43+
).findFirst();
44+
45+
var modelId = model.map(PluginModel::id).orElse(0L);
46+
var versionId = model.map(x -> x.getLatestPluginVersion()
47+
.map(PluginVersion::id).orElse(0L)
48+
).orElse(0L);
49+
50+
requested.add(installInput.name());
51+
tracker.addEntry(installInput.name(), true, versionId, modelId);
52+
53+
return defaultResult;
54+
}
55+
56+
Set<String> getRequested() {
57+
return new HashSet<>(requested);
58+
}
59+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package org.hydev.mcpm.client.database;
2+
3+
import org.hydev.mcpm.client.database.tracker.PluginTracker;
4+
import org.hydev.mcpm.client.models.PluginTrackerModel;
5+
import org.hydev.mcpm.client.models.PluginYml;
6+
import org.hydev.mcpm.utils.Pair;
7+
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
public record MockPluginTracker(
12+
Map<String, Boolean> entries,
13+
List<PluginYml> installed
14+
) implements PluginTracker {
15+
private static Map<String, Boolean> makeEntries(List<PluginYml> installed) {
16+
return installed.stream()
17+
.map(x -> Pair.of(x.name(), true))
18+
.collect(Pair.<String, Boolean>toMap());
19+
}
20+
21+
public MockPluginTracker(List<PluginYml> installed) {
22+
this(makeEntries(installed), installed);
23+
}
24+
25+
26+
@Override
27+
public void addEntry(String name, boolean status, long versionId, long pluginId) {
28+
entries.put(name, status);
29+
}
30+
31+
@Override
32+
public void removeEntry(String name) {
33+
entries.remove(name);
34+
}
35+
36+
@Override
37+
public List<PluginTrackerModel> listEntries() {
38+
return null;
39+
}
40+
41+
@Override
42+
public List<PluginYml> listInstalled() {
43+
return installed;
44+
}
45+
46+
@Override
47+
public void setManuallyInstalled(String name) {
48+
if (!entries.containsKey(name)) {
49+
return;
50+
}
51+
52+
entries.put(name, true);
53+
}
54+
55+
@Override
56+
public void removeManuallyInstalled(String name) {
57+
if (!entries.containsKey(name)) {
58+
return;
59+
}
60+
61+
entries.put(name, false);
62+
}
63+
64+
@Override
65+
public Boolean findIfInLockById(String id) {
66+
return null;
67+
}
68+
69+
@Override
70+
public List<String> listManuallyInstalled() {
71+
return entries().entrySet().stream()
72+
.filter(Map.Entry::getValue)
73+
.map(Map.Entry::getKey)
74+
.toList();
75+
}
76+
77+
@Override
78+
public List<PluginYml> listOrphanPlugins(boolean considerSoftDependencies) {
79+
return List.of();
80+
}
81+
82+
@Override
83+
public Boolean findIfInLockByName(String name) {
84+
return entries.containsKey(name);
85+
}
86+
}

src/test/java/org/hydev/mcpm/client/database/PluginMockFactory.java

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,18 @@ public static PluginYml meta(String name, String version, String description,
6767
);
6868
}
6969

70+
/**
71+
* Creates a mock PluginYml object.
72+
*
73+
* @param name The name of the plugin.
74+
* @param version The version string for the plugin.
75+
* @param description The description for the plugin.
76+
* @return A PluginYml object.
77+
*/
78+
public static PluginYml meta(String name, String version, String description) {
79+
return meta(name, version, description, null);
80+
}
81+
7082
/**
7183
* Creates a mock PluginVersion object.
7284
*
@@ -76,7 +88,7 @@ public static PluginYml meta(String name, String version, String description,
7688
* @return A PluginVersion object.
7789
*/
7890
public static PluginVersion version(long id, String name, String string) {
79-
return new PluginVersion(id, 0, "", meta(name, string, null, null));
91+
return version(id, name, string, name, null);
8092
}
8193

8294
/**
@@ -89,8 +101,10 @@ public static PluginVersion version(long id, String name, String string) {
89101
* @param commands The commands in the plugin.
90102
* @return A PluginVersion object.
91103
*/
92-
public static PluginVersion version(long id, String name, String string, String description,
93-
Map<String, PluginCommand> commands) {
104+
public static PluginVersion version(
105+
long id, String name, String string, String description,
106+
Map<String, PluginCommand> commands
107+
) {
94108
return new PluginVersion(id, 0, "", meta(name, string, description, commands));
95109
}
96110

@@ -120,6 +134,20 @@ public static PluginModel model(long id, String name) {
120134
);
121135
}
122136

137+
/**
138+
* Creates a mock PluginModel object.
139+
* The first version in versionNames will have id 0, the next will have id 1, and so on...
140+
* Commands are defaulted to null.
141+
*
142+
* @param id The plugin id.
143+
* @param name The plugin name.
144+
* @param versionNames The individual version strings for each version.
145+
* @return A PluginModel object.
146+
*/
147+
public static PluginModel model(long id, String name, List<String> versionNames) {
148+
return model(id, name, name, versionNames, null);
149+
}
150+
123151
/**
124152
* Creates a mock PluginModel object.
125153
* The first version in versionNames will have id 0, the next will have id 1, and so on...
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.hydev.mcpm.client.database;
2+
3+
import org.hydev.mcpm.client.commands.presenters.InstallResultPresenter;
4+
import org.hydev.mcpm.client.installer.InstallResult;
5+
6+
public class SilentInstallPresenter implements InstallResultPresenter {
7+
@Override
8+
public void displayResult(InstallResult installResult, String name) {
9+
/* do nothing */
10+
}
11+
}

0 commit comments

Comments
 (0)