mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-19 05:30:43 +00:00
Merge branch 'feature/CTLE-153-default-ct-live-packing-slips-to-deposco' into integration/sprint-26
# Conflicts: # qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceValidator.java # qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QInstanceValidatorTest.java # qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java # qqq-middleware-javalin/src/test/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementationTest.java # qqq-middleware-javalin/src/test/java/com/kingsrook/qqq/backend/javalin/TestUtils.java
This commit is contained in:
@ -26,11 +26,15 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
import com.kingsrook.qqq.backend.core.BaseTest;
|
||||
import com.kingsrook.qqq.backend.core.context.QContext;
|
||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
import com.kingsrook.qqq.backend.core.model.templates.ConvertHtmlToPdfInput;
|
||||
import com.kingsrook.qqq.backend.core.model.templates.RenderTemplateInput;
|
||||
import com.kingsrook.qqq.backend.core.model.templates.RenderTemplateOutput;
|
||||
import com.kingsrook.qqq.backend.core.model.templates.TemplateType;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
|
||||
@ -46,10 +50,10 @@ class ConvertHtmlToPdfActionTest extends BaseTest
|
||||
@Test
|
||||
void test() throws QException, IOException
|
||||
{
|
||||
QInstance instance = QContext.getQInstance();
|
||||
ConvertHtmlToPdfInput input = new ConvertHtmlToPdfInput();
|
||||
QInstance instance = QContext.getQInstance();
|
||||
|
||||
input.setHtml("""
|
||||
RenderTemplateInput renderTemplateInput = new RenderTemplateInput();
|
||||
renderTemplateInput.setCode("""
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
@ -70,7 +74,7 @@ class ConvertHtmlToPdfActionTest extends BaseTest
|
||||
<div class="center_div">
|
||||
<h1>
|
||||
<img src="images/qqq-logo-2.png" width=50>
|
||||
Hello QQQ!
|
||||
Hello, $name
|
||||
</h1>
|
||||
<div class="myclass">
|
||||
<p>This is a test of converting HTML to PDF!!</p>
|
||||
@ -80,6 +84,12 @@ class ConvertHtmlToPdfActionTest extends BaseTest
|
||||
</body>
|
||||
</html>
|
||||
""");
|
||||
renderTemplateInput.setTemplateType(TemplateType.VELOCITY);
|
||||
renderTemplateInput.setContext(Map.of("name", "Darin"));
|
||||
RenderTemplateOutput renderTemplateOutput = new RenderTemplateAction().execute(renderTemplateInput);
|
||||
|
||||
ConvertHtmlToPdfInput input = new ConvertHtmlToPdfInput();
|
||||
input.setHtml(renderTemplateOutput.getResult());
|
||||
|
||||
OutputStream outputStream = new FileOutputStream("/tmp/file.pdf");
|
||||
input.setOutputStream(outputStream);
|
||||
@ -97,6 +107,7 @@ class ConvertHtmlToPdfActionTest extends BaseTest
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// for local dev on a mac, turn this on to auto-open the generated PDF //
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// todo not commit
|
||||
// Runtime.getRuntime().exec(new String[] { "/usr/bin/open", "/tmp/file.pdf" });
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,7 @@ import com.kingsrook.qqq.backend.core.model.templates.RenderTemplateInput;
|
||||
import com.kingsrook.qqq.backend.core.model.templates.RenderTemplateOutput;
|
||||
import com.kingsrook.qqq.backend.core.model.templates.TemplateType;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
@ -36,8 +37,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
/*******************************************************************************
|
||||
** Unit test for RenderTemplateAction
|
||||
*******************************************************************************/
|
||||
class RenderTemplateActionTest extends BaseTest
|
||||
public class RenderTemplateActionTest extends BaseTest
|
||||
{
|
||||
private int doThrowCallCount = 0;
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
@ -82,11 +86,46 @@ class RenderTemplateActionTest extends BaseTest
|
||||
@Test
|
||||
void testMissingType()
|
||||
{
|
||||
RenderTemplateInput parentActionInput = new RenderTemplateInput();
|
||||
|
||||
assertThatThrownBy(() -> RenderTemplateAction.render(parentActionInput, null, Map.of("name", "Darin"), "Hello, $name"))
|
||||
assertThatThrownBy(() -> RenderTemplateAction.render(null, Map.of("name", "Darin"), "Hello, $name"))
|
||||
.isInstanceOf(QException.class)
|
||||
.hasMessageContaining("Unsupported Template Type");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
void testExceptionInVelocity() throws QException
|
||||
{
|
||||
RenderTemplateInput renderTemplateInput = new RenderTemplateInput();
|
||||
renderTemplateInput.setCode("""
|
||||
This should throw: $this.doThrow().
|
||||
This should throw silently: $!this.doThrow().
|
||||
""");
|
||||
renderTemplateInput.setContext(Map.of("this", this));
|
||||
renderTemplateInput.setTemplateType(TemplateType.VELOCITY);
|
||||
RenderTemplateOutput output = new RenderTemplateAction().execute(renderTemplateInput);
|
||||
assertThat(output.getResult())
|
||||
.contains("throw: $this.doThrow().")
|
||||
.contains("throw silently: .");
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
// make sure our method got called twice as expected //
|
||||
///////////////////////////////////////////////////////
|
||||
assertEquals(2, doThrowCallCount);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
public String doThrow() throws Exception
|
||||
{
|
||||
doThrowCallCount++;
|
||||
throw (new Exception("You asked to throw..."));
|
||||
}
|
||||
|
||||
}
|
@ -46,6 +46,8 @@ import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeType;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.AdornmentType;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAdornment;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior;
|
||||
@ -1730,6 +1732,35 @@ class QInstanceValidatorTest extends BaseTest
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
void testFieldAdornments()
|
||||
{
|
||||
Function<QInstance, QFieldMetaData> fieldExtractor = qInstance -> qInstance.getTable(TestUtils.TABLE_NAME_PERSON).getField("firstName");
|
||||
|
||||
assertValidationFailureReasons((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment())), "adornment that is missing a type");
|
||||
assertValidationSuccess((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment().withType(AdornmentType.REVEAL))));
|
||||
|
||||
////////////////////////////////
|
||||
// type-specific value checks //
|
||||
////////////////////////////////
|
||||
assertValidationFailureReasons((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment(AdornmentType.SIZE))), "missing a width value");
|
||||
assertValidationFailureReasons((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment(AdornmentType.SIZE).withValue("width", "foo"))), "unrecognized width value");
|
||||
assertValidationSuccess((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment(AdornmentType.SIZE).withValue("width", AdornmentType.Size.MEDIUM))));
|
||||
assertValidationSuccess((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(AdornmentType.Size.SMALL.toAdornment())));
|
||||
|
||||
assertValidationFailureReasons((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment(AdornmentType.FILE_DOWNLOAD).withValue("fileNameField", "foo"))), "unrecognized fileNameField [foo]");
|
||||
assertValidationSuccess((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment(AdornmentType.FILE_DOWNLOAD).withValue("fileNameField", "lastName"))));
|
||||
|
||||
assertValidationFailureReasons((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment(AdornmentType.FILE_DOWNLOAD).withValue("fileNameFormatFields", "foo"))), "fileNameFormatFields could not be accessed");
|
||||
assertValidationFailureReasons((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment(AdornmentType.FILE_DOWNLOAD).withValue("fileNameFormatFields", new ArrayList<>(List.of("foo"))))), "unrecognized field name in fileNameFormatFields [foo]");
|
||||
assertValidationSuccess((qInstance -> fieldExtractor.apply(qInstance).withFieldAdornment(new FieldAdornment(AdornmentType.FILE_DOWNLOAD).withValue("fileNameFormatFields", new ArrayList<>(List.of("lastName"))))));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
|
Reference in New Issue
Block a user