mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-05-25 11:22:00 +00:00
Add additional unit tests for utils and EE (#3557)
## Summary - add tests for LicenseKeyChecker - expand GeneralUtils coverage - cover extra PdfUtils functionality - merge PdfUtilsMoreTest into PdfUtilsTest ## Testing - `./gradlew test --no-daemon` - `./gradlew build spotlessApply --no-daemon`
This commit is contained in:
parent
c8e25f4c5a
commit
46cc2e05df
@ -0,0 +1,77 @@
|
|||||||
|
package stirling.software.SPDF.EE;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
|
import stirling.software.SPDF.EE.KeygenLicenseVerifier.License;
|
||||||
|
import stirling.software.SPDF.model.ApplicationProperties;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class LicenseKeyCheckerTest {
|
||||||
|
|
||||||
|
@Mock private KeygenLicenseVerifier verifier;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void premiumDisabled_skipsVerification() {
|
||||||
|
ApplicationProperties props = new ApplicationProperties();
|
||||||
|
props.getPremium().setEnabled(false);
|
||||||
|
props.getPremium().setKey("dummy");
|
||||||
|
|
||||||
|
LicenseKeyChecker checker = new LicenseKeyChecker(verifier, props);
|
||||||
|
|
||||||
|
assertEquals(License.NORMAL, checker.getPremiumLicenseEnabledResult());
|
||||||
|
verifyNoInteractions(verifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void directKey_verified() {
|
||||||
|
ApplicationProperties props = new ApplicationProperties();
|
||||||
|
props.getPremium().setEnabled(true);
|
||||||
|
props.getPremium().setKey("abc");
|
||||||
|
when(verifier.verifyLicense("abc")).thenReturn(License.PRO);
|
||||||
|
|
||||||
|
LicenseKeyChecker checker = new LicenseKeyChecker(verifier, props);
|
||||||
|
|
||||||
|
assertEquals(License.PRO, checker.getPremiumLicenseEnabledResult());
|
||||||
|
verify(verifier).verifyLicense("abc");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void fileKey_verified(@TempDir Path temp) throws IOException {
|
||||||
|
Path file = temp.resolve("license.txt");
|
||||||
|
Files.writeString(file, "filekey");
|
||||||
|
|
||||||
|
ApplicationProperties props = new ApplicationProperties();
|
||||||
|
props.getPremium().setEnabled(true);
|
||||||
|
props.getPremium().setKey("file:" + file.toString());
|
||||||
|
when(verifier.verifyLicense("filekey")).thenReturn(License.ENTERPRISE);
|
||||||
|
|
||||||
|
LicenseKeyChecker checker = new LicenseKeyChecker(verifier, props);
|
||||||
|
|
||||||
|
assertEquals(License.ENTERPRISE, checker.getPremiumLicenseEnabledResult());
|
||||||
|
verify(verifier).verifyLicense("filekey");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void missingFile_resultsNormal(@TempDir Path temp) {
|
||||||
|
Path file = temp.resolve("missing.txt");
|
||||||
|
ApplicationProperties props = new ApplicationProperties();
|
||||||
|
props.getPremium().setEnabled(true);
|
||||||
|
props.getPremium().setKey("file:" + file.toString());
|
||||||
|
|
||||||
|
LicenseKeyChecker checker = new LicenseKeyChecker(verifier, props);
|
||||||
|
|
||||||
|
assertEquals(License.NORMAL, checker.getPremiumLicenseEnabledResult());
|
||||||
|
verifyNoInteractions(verifier);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package stirling.software.SPDF.utils;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class GeneralUtilsAdditionalTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testConvertSizeToBytes() {
|
||||||
|
assertEquals(1024L, GeneralUtils.convertSizeToBytes("1KB"));
|
||||||
|
assertEquals(1024L * 1024, GeneralUtils.convertSizeToBytes("1MB"));
|
||||||
|
assertEquals(1024L * 1024 * 1024, GeneralUtils.convertSizeToBytes("1GB"));
|
||||||
|
assertEquals(100L * 1024 * 1024, GeneralUtils.convertSizeToBytes("100"));
|
||||||
|
assertNull(GeneralUtils.convertSizeToBytes("invalid"));
|
||||||
|
assertNull(GeneralUtils.convertSizeToBytes(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testFormatBytes() {
|
||||||
|
assertEquals("512 B", GeneralUtils.formatBytes(512));
|
||||||
|
assertEquals("1.00 KB", GeneralUtils.formatBytes(1024));
|
||||||
|
assertEquals("1.00 MB", GeneralUtils.formatBytes(1024L * 1024));
|
||||||
|
assertEquals("1.00 GB", GeneralUtils.formatBytes(1024L * 1024 * 1024));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testURLHelpersAndUUID() {
|
||||||
|
assertTrue(GeneralUtils.isValidURL("https://example.com"));
|
||||||
|
assertFalse(GeneralUtils.isValidURL("htp:/bad"));
|
||||||
|
assertFalse(GeneralUtils.isURLReachable("http://localhost"));
|
||||||
|
assertFalse(GeneralUtils.isURLReachable("ftp://example.com"));
|
||||||
|
|
||||||
|
assertTrue(GeneralUtils.isValidUUID("123e4567-e89b-12d3-a456-426614174000"));
|
||||||
|
assertFalse(GeneralUtils.isValidUUID("not-a-uuid"));
|
||||||
|
|
||||||
|
assertFalse(GeneralUtils.isVersionHigher(null, "1.0"));
|
||||||
|
assertTrue(GeneralUtils.isVersionHigher("2.0", "1.9"));
|
||||||
|
assertFalse(GeneralUtils.isVersionHigher("1.0", "1.0.1"));
|
||||||
|
}
|
||||||
|
}
|
@ -5,12 +5,17 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
|
|||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.pdfbox.cos.COSName;
|
import org.apache.pdfbox.cos.COSName;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
import org.apache.pdfbox.pdmodel.PDPage;
|
import org.apache.pdfbox.pdmodel.PDPage;
|
||||||
import org.apache.pdfbox.pdmodel.PDResources;
|
import org.apache.pdfbox.pdmodel.PDResources;
|
||||||
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||||
@ -18,6 +23,10 @@ import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
|
|||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
|
import stirling.software.SPDF.model.ApplicationProperties;
|
||||||
|
import stirling.software.SPDF.service.CustomPDFDocumentFactory;
|
||||||
|
import stirling.software.SPDF.service.PdfMetadataService;
|
||||||
|
|
||||||
public class PdfUtilsTest {
|
public class PdfUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -49,4 +58,68 @@ public class PdfUtilsTest {
|
|||||||
|
|
||||||
assertTrue(PdfUtils.hasImagesOnPage(page));
|
assertTrue(PdfUtils.hasImagesOnPage(page));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPageCountComparators() throws Exception {
|
||||||
|
PDDocument doc1 = new PDDocument();
|
||||||
|
doc1.addPage(new PDPage());
|
||||||
|
doc1.addPage(new PDPage());
|
||||||
|
doc1.addPage(new PDPage());
|
||||||
|
PdfUtils utils = new PdfUtils();
|
||||||
|
assertTrue(utils.pageCount(doc1, 2, "greater"));
|
||||||
|
|
||||||
|
PDDocument doc2 = new PDDocument();
|
||||||
|
doc2.addPage(new PDPage());
|
||||||
|
doc2.addPage(new PDPage());
|
||||||
|
doc2.addPage(new PDPage());
|
||||||
|
assertTrue(utils.pageCount(doc2, 3, "equal"));
|
||||||
|
|
||||||
|
PDDocument doc3 = new PDDocument();
|
||||||
|
doc3.addPage(new PDPage());
|
||||||
|
doc3.addPage(new PDPage());
|
||||||
|
assertTrue(utils.pageCount(doc3, 5, "less"));
|
||||||
|
|
||||||
|
PDDocument doc4 = new PDDocument();
|
||||||
|
doc4.addPage(new PDPage());
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> utils.pageCount(doc4, 1, "bad"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPageSize() throws Exception {
|
||||||
|
PDDocument doc = new PDDocument();
|
||||||
|
PDPage page = new PDPage(PDRectangle.A4);
|
||||||
|
doc.addPage(page);
|
||||||
|
PDRectangle rect = page.getMediaBox();
|
||||||
|
String expected = rect.getWidth() + "x" + rect.getHeight();
|
||||||
|
PdfUtils utils = new PdfUtils();
|
||||||
|
assertTrue(utils.pageSize(doc, expected));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testOverlayImage() throws Exception {
|
||||||
|
PDDocument doc = new PDDocument();
|
||||||
|
doc.addPage(new PDPage(PDRectangle.A4));
|
||||||
|
ByteArrayOutputStream pdfOut = new ByteArrayOutputStream();
|
||||||
|
doc.save(pdfOut);
|
||||||
|
doc.close();
|
||||||
|
|
||||||
|
BufferedImage image = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB);
|
||||||
|
Graphics2D g = image.createGraphics();
|
||||||
|
g.setColor(Color.RED);
|
||||||
|
g.fillRect(0, 0, 10, 10);
|
||||||
|
g.dispose();
|
||||||
|
ByteArrayOutputStream imgOut = new ByteArrayOutputStream();
|
||||||
|
javax.imageio.ImageIO.write(image, "png", imgOut);
|
||||||
|
|
||||||
|
PdfMetadataService meta =
|
||||||
|
new PdfMetadataService(new ApplicationProperties(), "label", false, null);
|
||||||
|
CustomPDFDocumentFactory factory = new CustomPDFDocumentFactory(meta);
|
||||||
|
|
||||||
|
byte[] result =
|
||||||
|
PdfUtils.overlayImage(
|
||||||
|
factory, pdfOut.toByteArray(), imgOut.toByteArray(), 0, 0, false);
|
||||||
|
try (PDDocument resultDoc = factory.load(result)) {
|
||||||
|
assertEquals(1, resultDoc.getNumberOfPages());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user