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:
@ -22,6 +22,8 @@
|
||||
package com.kingsrook.qqq.backend.javalin;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@ -185,6 +187,63 @@ class QJavalinImplementationTest extends QJavalinTestBase
|
||||
JSONObject values = jsonObject.getJSONObject("values");
|
||||
assertTrue(values.has("firstName"));
|
||||
assertTrue(values.has("id"));
|
||||
assertTrue(values.has("photo"));
|
||||
|
||||
JSONObject displayValues = jsonObject.getJSONObject("displayValues");
|
||||
assertEquals("darin-photo.png", displayValues.getString("photo"));
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// make sure person 2 doesn't have the blob value //
|
||||
////////////////////////////////////////////////////
|
||||
response = Unirest.get(BASE_URL + "/data/person/2").asString();
|
||||
assertEquals(200, response.getStatus());
|
||||
jsonObject = JsonUtils.toJSONObject(response.getBody());
|
||||
values = jsonObject.getJSONObject("values");
|
||||
assertFalse(values.has("photo"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** test downloading a blob file
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
public void test_dataDownloadRecordField()
|
||||
{
|
||||
HttpResponse<String> response = Unirest.get(BASE_URL + "/data/person/1/photo/darin-photo.png").asString();
|
||||
assertEquals(200, response.getStatus());
|
||||
assertThat(response.getHeaders().get("content-type").get(0)).contains("image");
|
||||
|
||||
response = Unirest.get(BASE_URL + "/data/person/1/photo/darin-photo.png?download=1").asString();
|
||||
assertEquals(200, response.getStatus());
|
||||
assertThat(response.getHeaders().get("content-disposition").get(0))
|
||||
.contains("attachment")
|
||||
.contains("darin-photo.png");
|
||||
|
||||
/////////////////////////
|
||||
// bad record id = 404 //
|
||||
/////////////////////////
|
||||
response = Unirest.get(BASE_URL + "/data/person/-1/photo/darin-photo.png").asString();
|
||||
assertEquals(404, response.getStatus());
|
||||
|
||||
//////////////////////////
|
||||
// bad field name = 404 //
|
||||
//////////////////////////
|
||||
response = Unirest.get(BASE_URL + "/data/person/1/notPhoto/darin-photo.png").asString();
|
||||
assertEquals(404, response.getStatus());
|
||||
|
||||
/////////////////////////////
|
||||
// missing file name = 404 //
|
||||
/////////////////////////////
|
||||
response = Unirest.get(BASE_URL + "/data/person/1/photo").asString();
|
||||
assertEquals(404, response.getStatus());
|
||||
|
||||
//////////////////////////
|
||||
// bad table name = 404 //
|
||||
//////////////////////////
|
||||
response = Unirest.get(BASE_URL + "/data/notPerson/1/photo/darin-photo.png").asString();
|
||||
assertEquals(404, response.getStatus());
|
||||
}
|
||||
|
||||
|
||||
@ -431,29 +490,34 @@ class QJavalinImplementationTest extends QJavalinTestBase
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
public void test_dataInsertMultipartForm()
|
||||
public void test_dataInsertMultipartForm() throws IOException
|
||||
{
|
||||
HttpResponse<String> response = Unirest.post(BASE_URL + "/data/person")
|
||||
.header("Content-Type", "application/json")
|
||||
.multiPartContent()
|
||||
.field("firstName", "Bobby")
|
||||
.field("lastName", "Hull")
|
||||
.field("email", "bobby@hull.com")
|
||||
.asString();
|
||||
try(InputStream photoInputStream = getClass().getResourceAsStream("/photo.png"))
|
||||
{
|
||||
HttpResponse<String> response = Unirest.post(BASE_URL + "/data/person")
|
||||
.header("Content-Type", "application/json")
|
||||
.multiPartContent()
|
||||
.field("firstName", "Bobby")
|
||||
.field("lastName", "Hull")
|
||||
.field("email", "bobby@hull.com")
|
||||
.field("photo", photoInputStream.readAllBytes(), "image")
|
||||
.asString();
|
||||
|
||||
assertEquals(200, response.getStatus());
|
||||
JSONObject jsonObject = JsonUtils.toJSONObject(response.getBody());
|
||||
assertTrue(jsonObject.has("records"));
|
||||
JSONArray records = jsonObject.getJSONArray("records");
|
||||
assertEquals(1, records.length());
|
||||
JSONObject record0 = records.getJSONObject(0);
|
||||
assertTrue(record0.has("values"));
|
||||
assertEquals("person", record0.getString("tableName"));
|
||||
JSONObject values0 = record0.getJSONObject("values");
|
||||
assertTrue(values0.has("firstName"));
|
||||
assertEquals("Bobby", values0.getString("firstName"));
|
||||
assertTrue(values0.has("id"));
|
||||
assertEquals(7, values0.getInt("id"));
|
||||
assertEquals(200, response.getStatus());
|
||||
JSONObject jsonObject = JsonUtils.toJSONObject(response.getBody());
|
||||
assertTrue(jsonObject.has("records"));
|
||||
JSONArray records = jsonObject.getJSONArray("records");
|
||||
assertEquals(1, records.length());
|
||||
JSONObject record0 = records.getJSONObject(0);
|
||||
assertTrue(record0.has("values"));
|
||||
assertEquals("person", record0.getString("tableName"));
|
||||
JSONObject values0 = record0.getJSONObject("values");
|
||||
assertTrue(values0.has("firstName"));
|
||||
assertEquals("Bobby", values0.getString("firstName"));
|
||||
assertTrue(values0.has("id"));
|
||||
assertEquals(7, values0.getInt("id"));
|
||||
assertTrue(values0.has("photo"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -539,6 +603,44 @@ class QJavalinImplementationTest extends QJavalinTestBase
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** test an update - posting the data as a multipart form
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
public void test_dataUpdateMultipartForm()
|
||||
{
|
||||
HttpResponse<String> response = Unirest.patch(BASE_URL + "/data/person/4")
|
||||
.multiPartContent()
|
||||
.field("firstName", "Free")
|
||||
.field("birthDate", "")
|
||||
.asString();
|
||||
|
||||
assertEquals(200, response.getStatus());
|
||||
JSONObject jsonObject = JsonUtils.toJSONObject(response.getBody());
|
||||
assertTrue(jsonObject.has("records"));
|
||||
JSONArray records = jsonObject.getJSONArray("records");
|
||||
assertEquals(1, records.length());
|
||||
JSONObject record0 = records.getJSONObject(0);
|
||||
assertTrue(record0.has("values"));
|
||||
assertEquals("person", record0.getString("tableName"));
|
||||
JSONObject values0 = record0.getJSONObject("values");
|
||||
assertEquals(4, values0.getInt("id"));
|
||||
assertEquals("Free", values0.getString("firstName"));
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// re-GET the record, and validate that birthDate was nulled out //
|
||||
///////////////////////////////////////////////////////////////////
|
||||
response = Unirest.get(BASE_URL + "/data/person/4").asString();
|
||||
assertEquals(200, response.getStatus());
|
||||
jsonObject = JsonUtils.toJSONObject(response.getBody());
|
||||
assertTrue(jsonObject.has("values"));
|
||||
JSONObject values = jsonObject.getJSONObject("values");
|
||||
assertFalse(values.has("birthDate"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** test a delete
|
||||
**
|
||||
@ -718,4 +820,35 @@ class QJavalinImplementationTest extends QJavalinTestBase
|
||||
assertEquals(5, jsonObject.getJSONArray("options").getJSONObject(1).getInt("id"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
void testServerInfo()
|
||||
{
|
||||
HttpResponse<String> response = Unirest.get(BASE_URL + "/serverInfo").asString();
|
||||
assertEquals(200, response.getStatus());
|
||||
JSONObject jsonObject = JsonUtils.toJSONObject(response.getBody());
|
||||
assertNotNull(jsonObject);
|
||||
assertTrue(jsonObject.has("startTimeMillis"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
@Test
|
||||
void testAuthenticationMetaData()
|
||||
{
|
||||
HttpResponse<String> response = Unirest.get(BASE_URL + "/metaData/authentication").asString();
|
||||
assertEquals(200, response.getStatus());
|
||||
JSONObject jsonObject = JsonUtils.toJSONObject(response.getBody());
|
||||
assertNotNull(jsonObject);
|
||||
assertTrue(jsonObject.has("name"));
|
||||
assertTrue(jsonObject.has("type"));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -43,6 +43,8 @@ import com.kingsrook.qqq.backend.core.model.metadata.authentication.QAuthenticat
|
||||
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.dashboard.QWidgetMetaData;
|
||||
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.joins.JoinOn;
|
||||
@ -228,7 +230,7 @@ public class TestUtils
|
||||
*******************************************************************************/
|
||||
public static QTableMetaData defineTablePerson()
|
||||
{
|
||||
return new QTableMetaData()
|
||||
QTableMetaData qTableMetaData = new QTableMetaData()
|
||||
.withName(TABLE_NAME_PERSON)
|
||||
.withLabel("Person")
|
||||
.withRecordLabelFormat("%s %s")
|
||||
@ -244,10 +246,20 @@ public class TestUtils
|
||||
.withField(new QFieldMetaData("partnerPersonId", QFieldType.INTEGER).withBackendName("partner_person_id").withPossibleValueSourceName(TABLE_NAME_PERSON))
|
||||
.withField(new QFieldMetaData("email", QFieldType.STRING))
|
||||
.withField(new QFieldMetaData("testScriptId", QFieldType.INTEGER).withBackendName("test_script_id"))
|
||||
.withField(new QFieldMetaData("photo", QFieldType.BLOB).withBackendName("photo"))
|
||||
.withField(new QFieldMetaData("photoFileName", QFieldType.STRING).withBackendName("photo_file_name"))
|
||||
.withAssociatedScript(new AssociatedScript()
|
||||
.withFieldName("testScriptId")
|
||||
.withScriptTypeId(1)
|
||||
.withScriptTester(new QCodeReference(TestScriptAction.class)));
|
||||
|
||||
qTableMetaData.getField("photo")
|
||||
.withIsHeavy(true)
|
||||
.withFieldAdornment(new FieldAdornment(AdornmentType.FILE_DOWNLOAD)
|
||||
.withValue(AdornmentType.FileDownloadValues.DEFAULT_MIME_TYPE, "image")
|
||||
.withValue(AdornmentType.FileDownloadValues.FILE_NAME_FIELD, "photoFileName"));
|
||||
|
||||
return (qTableMetaData);
|
||||
}
|
||||
|
||||
|
||||
|
BIN
qqq-middleware-javalin/src/test/resources/photo.png
Normal file
BIN
qqq-middleware-javalin/src/test/resources/photo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 150 B |
@ -31,10 +31,12 @@ CREATE TABLE person
|
||||
birth_date DATE,
|
||||
email VARCHAR(250) NOT NULL,
|
||||
partner_person_id INT,
|
||||
test_script_id INT
|
||||
test_script_id INT,
|
||||
photo BLOB,
|
||||
photo_file_name VARCHAR(50)
|
||||
);
|
||||
|
||||
INSERT INTO person (id, first_name, last_name, birth_date, email, partner_person_id) VALUES (1, 'Darin', 'Kelkhoff', '1980-05-31', 'darin.kelkhoff@gmail.com', 6);
|
||||
INSERT INTO person (id, first_name, last_name, birth_date, email, partner_person_id, photo, photo_file_name) VALUES (1, 'Darin', 'Kelkhoff', '1980-05-31', 'darin.kelkhoff@gmail.com', 6, '12345', 'darin-photo.png');
|
||||
INSERT INTO person (id, first_name, last_name, birth_date, email) VALUES (2, 'James', 'Maes', '1980-05-15', 'jmaes@mmltholdings.com');
|
||||
INSERT INTO person (id, first_name, last_name, birth_date, email) VALUES (3, 'Tim', 'Chamberlain', '1976-05-28', 'tchamberlain@mmltholdings.com');
|
||||
INSERT INTO person (id, first_name, last_name, birth_date, email) VALUES (4, 'Tyler', 'Samples', '1990-01-01', 'tsamples@mmltholdings.com');
|
||||
|
Reference in New Issue
Block a user