Fixed addon api-version compatibility check

Fixes https://github.com/BentoBoxWorld/BentoBox/issues/1346
Added a unit test to prevent regressions

Newer BentoBox releases are now properly considered "compatible" to addons expecting an older patch release
This commit is contained in:
Florian CUNY 2020-05-09 11:26:00 +02:00
parent 11510b15fc
commit 937052d378
2 changed files with 28 additions and 12 deletions

View File

@ -288,12 +288,17 @@ public class AddonsManager {
bentoboxNumber = Integer.parseInt(bentoboxVersion[i]); bentoboxNumber = Integer.parseInt(bentoboxVersion[i]);
} }
int apiNumber = Util.isInteger(apiVersion[i], false) ? Integer.parseInt(apiVersion[i]) : -1; int apiNumber = Util.isInteger(apiVersion[i], false) ? Integer.parseInt(apiVersion[i]) : -1;
if (bentoboxNumber < apiNumber) {
return false; if (bentoboxNumber > apiNumber) {
return true; // BentoBox version is greater than the required version -> compatible
} }
if (bentoboxNumber < apiNumber) {
return false; // BentoBox is definitely outdated
}
// If it is equal, go to the next number
} }
return true; return true; // Everything is equal, so return true
} }
/** /**

View File

@ -252,7 +252,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxSnapshotNoAPIVersion() { public void testIsAddonCompatibleWithBentoBoxSnapshotNoAPIVersion() {
@ -263,7 +263,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxReleaseAPIVersion() { public void testIsAddonCompatibleWithBentoBoxReleaseAPIVersion() {
@ -274,7 +274,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxSnapshotAPIVersion() { public void testIsAddonCompatibleWithBentoBoxSnapshotAPIVersion() {
@ -285,7 +285,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxReleaseNoAPIVersion() { public void testIsAddonCompatibleWithBentoBoxReleaseNoAPIVersion() {
@ -296,7 +296,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxSnapshotAPIVersionVariableDigits() { public void testIsAddonCompatibleWithBentoBoxSnapshotAPIVersionVariableDigits() {
@ -307,7 +307,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxOldSnapshot() { public void testIsAddonCompatibleWithBentoBoxOldSnapshot() {
@ -318,7 +318,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxOldRelease() { public void testIsAddonCompatibleWithBentoBoxOldRelease() {
@ -329,7 +329,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxOldReleaseLong() { public void testIsAddonCompatibleWithBentoBoxOldReleaseLong() {
@ -340,7 +340,7 @@ public class AddonsManagerTest {
} }
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}. * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
*/ */
@Test @Test
public void testIsAddonCompatibleWithBentoBoxOldReleaseLongAPI() { public void testIsAddonCompatibleWithBentoBoxOldReleaseLongAPI() {
@ -350,6 +350,17 @@ public class AddonsManagerTest {
assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.11.1")); assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.11.1"));
} }
/**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon, String)}.
* Prevents regression on https://github.com/BentoBoxWorld/BentoBox/issues/1346.
*/
@Test
public void testIsAddonCompatibleWithBentoBoxNewRelease() {
Addon addon = mock(Addon.class);
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.0").apiVersion("1.13.1").build();
when(addon.getDescription()).thenReturn(addonDesc);
assertTrue(am.isAddonCompatibleWithBentoBox(addon, "1.14.0-SNAPSHOT-b1777"));
}
/** /**
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setPerms(Addon)} * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setPerms(Addon)}