From dfc81721892911ac3ee029d3d8db30d42c76a83d Mon Sep 17 00:00:00 2001 From: Saurav Suman Date: Thu, 14 Nov 2024 16:29:18 +0530 Subject: [PATCH] feat: added description and comment columns in all existing tables and apis --- .../down.sql | 19 ++++ .../up.sql | 20 ++++ .../src/api/config/handlers.rs | 12 +++ .../src/api/context/handlers.rs | 8 ++ .../src/api/context/types.rs | 6 ++ .../src/api/default_config/handlers.rs | 4 + .../src/api/default_config/types.rs | 2 + .../src/api/dimension/handlers.rs | 32 ++++--- .../src/api/dimension/types.rs | 6 ++ .../src/api/functions/handlers.rs | 4 +- .../src/api/type_templates/handlers.rs | 4 + .../src/api/type_templates/types.rs | 4 + crates/context_aware_config/src/db/models.rs | 10 +- crates/context_aware_config/src/db/schema.rs | 42 ++++++++- postman/cac.postman_collection.json | 91 +++++++++++-------- postman/cac/Context/Get Context/event.test.js | 2 + .../cac/custom types/Get Types/event.test.js | 10 ++ 17 files changed, 218 insertions(+), 58 deletions(-) create mode 100644 crates/context_aware_config/migrations/2024-11-06-123105_add_description_and_comment_columns/down.sql create mode 100644 crates/context_aware_config/migrations/2024-11-06-123105_add_description_and_comment_columns/up.sql diff --git a/crates/context_aware_config/migrations/2024-11-06-123105_add_description_and_comment_columns/down.sql b/crates/context_aware_config/migrations/2024-11-06-123105_add_description_and_comment_columns/down.sql new file mode 100644 index 00000000..ae4a5fbc --- /dev/null +++ b/crates/context_aware_config/migrations/2024-11-06-123105_add_description_and_comment_columns/down.sql @@ -0,0 +1,19 @@ +-- This file should undo anything in `up.sql` +-- contexts table +ALTER TABLE public.contexts DROP COLUMN IF EXISTS description; +ALTER TABLE public.contexts DROP COLUMN IF EXISTS comment; + +-- dimensions table +ALTER TABLE public.dimensions DROP COLUMN IF EXISTS description; +ALTER TABLE public.dimensions DROP COLUMN IF EXISTS comment; + +-- default_configs table +ALTER TABLE public.default_configs DROP COLUMN IF EXISTS description; +ALTER TABLE public.default_configs DROP COLUMN IF EXISTS comment; + +-- type_templates table +ALTER TABLE public.type_templates DROP COLUMN IF EXISTS description; +ALTER TABLE public.type_templates DROP COLUMN IF EXISTS comment; + +-- Revert column rename from description back to function_description +ALTER TABLE public.functions RENAME COLUMN description TO function_description; \ No newline at end of file diff --git a/crates/context_aware_config/migrations/2024-11-06-123105_add_description_and_comment_columns/up.sql b/crates/context_aware_config/migrations/2024-11-06-123105_add_description_and_comment_columns/up.sql new file mode 100644 index 00000000..36cfff76 --- /dev/null +++ b/crates/context_aware_config/migrations/2024-11-06-123105_add_description_and_comment_columns/up.sql @@ -0,0 +1,20 @@ +-- contexts table +ALTER TABLE public.contexts ADD COLUMN description TEXT; +ALTER TABLE public.contexts ADD COLUMN comment TEXT; + +-- dimensions table +ALTER TABLE public.dimensions ADD COLUMN description TEXT; +ALTER TABLE public.dimensions ADD COLUMN comment TEXT; + +-- default_configs table +ALTER TABLE public.default_configs ADD COLUMN description TEXT; +ALTER TABLE public.default_configs ADD COLUMN comment TEXT; + +-- type_templates table +ALTER TABLE public.type_templates ADD COLUMN description TEXT; +ALTER TABLE public.type_templates ADD COLUMN comment TEXT; + +-- functions table +-- Rename function_description to description +ALTER TABLE public.functions RENAME COLUMN function_description TO description; + diff --git a/crates/context_aware_config/src/api/config/handlers.rs b/crates/context_aware_config/src/api/config/handlers.rs index 9fd59a01..f697fe56 100644 --- a/crates/context_aware_config/src/api/config/handlers.rs +++ b/crates/context_aware_config/src/api/config/handlers.rs @@ -378,9 +378,21 @@ fn construct_new_payload( }, )?; + let description = res + .get("description") + .and_then(|val| val.as_str()) + .map(|s| s.to_string()); + + let comment = res + .get("comment") + .and_then(|val| val.as_str()) + .map(|s| s.to_string()); + return Ok(web::Json(PutReq { context: context, r#override: override_, + description, + comment, })); } diff --git a/crates/context_aware_config/src/api/context/handlers.rs b/crates/context_aware_config/src/api/context/handlers.rs index 648438bb..154fd730 100644 --- a/crates/context_aware_config/src/api/context/handlers.rs +++ b/crates/context_aware_config/src/api/context/handlers.rs @@ -207,6 +207,8 @@ fn create_ctx_from_put_req( tenant_config: &TenantConfig, ) -> superposition::Result { let ctx_condition = req.context.to_owned().into_inner(); + let description = req.description.to_owned(); + let comment = req.comment.clone(); let condition_val = Value::Object(ctx_condition.clone().into()); let r_override = req.r#override.clone().into_inner(); let ctx_override = Value::Object(r_override.clone().into()); @@ -242,6 +244,8 @@ fn create_ctx_from_put_req( created_by: user.get_email(), last_modified_at: Utc::now().naive_utc(), last_modified_by: user.get_email(), + description, + comment, }) } @@ -445,6 +449,8 @@ fn r#move( ) -> superposition::Result { use contexts::dsl; let req = req.into_inner(); + let description = req.description.clone(); + let comment = req.comment.clone(); let ctx_condition = req.context.to_owned().into_inner(); let ctx_condition_value = Value::Object(ctx_condition.clone().into()); let new_ctx_id = hash(&ctx_condition_value); @@ -488,6 +494,8 @@ fn r#move( override_: ctx.override_, last_modified_at: Utc::now().naive_utc(), last_modified_by: user.get_email(), + description, + comment, }; let handle_unique_violation = diff --git a/crates/context_aware_config/src/api/context/types.rs b/crates/context_aware_config/src/api/context/types.rs index 008f01dd..c7d804fa 100644 --- a/crates/context_aware_config/src/api/context/types.rs +++ b/crates/context_aware_config/src/api/context/types.rs @@ -6,12 +6,16 @@ use superposition_types::{Cac, Condition, Overrides}; pub struct PutReq { pub context: Cac, pub r#override: Cac, + pub description: Option, + pub comment: Option, } #[cfg_attr(test, derive(Debug, PartialEq))] // Derive traits only when running tests #[derive(Deserialize, Clone)] pub struct MoveReq { pub context: Cac, + pub description: Option, + pub comment: Option, } #[derive(Deserialize, Clone)] @@ -120,6 +124,8 @@ mod tests { let expected_action = ContextAction::Put(PutReq { context: context, r#override: override_, + description: None, + comment: None, }); let action_deserialized = diff --git a/crates/context_aware_config/src/api/default_config/handlers.rs b/crates/context_aware_config/src/api/default_config/handlers.rs index ec0307c5..1761f6d3 100644 --- a/crates/context_aware_config/src/api/default_config/handlers.rs +++ b/crates/context_aware_config/src/api/default_config/handlers.rs @@ -77,6 +77,8 @@ async fn create( )) } }; + let description = req.description.clone(); + let comment = req.comment.clone(); let result = fetch_default_key(&key, &mut conn); @@ -129,6 +131,8 @@ async fn create( created_at: created_at_val, last_modified_at: Utc::now().naive_utc(), last_modified_by: user.get_email(), + description, + comment, }; let schema_compile_result = JSONSchema::options() diff --git a/crates/context_aware_config/src/api/default_config/types.rs b/crates/context_aware_config/src/api/default_config/types.rs index 8366d00d..e3636375 100644 --- a/crates/context_aware_config/src/api/default_config/types.rs +++ b/crates/context_aware_config/src/api/default_config/types.rs @@ -10,6 +10,8 @@ pub struct CreateReq { pub schema: Option>, #[serde(default, deserialize_with = "deserialize_option")] pub function_name: Option, + pub description: Option, + pub comment: Option, } #[derive(Debug, Deserialize, AsRef, Deref, DerefMut, Into)] diff --git a/crates/context_aware_config/src/api/dimension/handlers.rs b/crates/context_aware_config/src/api/dimension/handlers.rs index 946932b7..15fe2141 100644 --- a/crates/context_aware_config/src/api/dimension/handlers.rs +++ b/crates/context_aware_config/src/api/dimension/handlers.rs @@ -2,7 +2,10 @@ use crate::{ api::dimension::{types::CreateReq, utils::get_dimension_usage_context_ids}, db::{ models::Dimension, - schema::{dimensions, dimensions::dsl::*}, + schema::dimensions::dsl::{ + created_at, dimension, dimensions as dimension_table, last_modified_at, + last_modified_by, + }, }, helpers::validate_jsonschema, }; @@ -81,11 +84,13 @@ async fn create( function_name: fun_name.clone(), last_modified_at: Utc::now().naive_utc(), last_modified_by: user.get_email(), + comment: create_req.comment.into(), + description: create_req.description.into(), }; - let upsert = diesel::insert_into(dimensions) + let upsert = diesel::insert_into(dimension_table) .values(&new_dimension) - .on_conflict(dimensions::dimension) + .on_conflict(dimension) .do_update() .set(&new_dimension) .get_result::(&mut conn); @@ -129,13 +134,13 @@ async fn get( let (total_pages, total_items, result) = match filters.all { Some(true) => { - let result: Vec = dimensions.get_results(&mut conn)?; + let result: Vec = dimension_table.get_results(&mut conn)?; (1, result.len() as i64, result) } _ => { - let n_dimensions: i64 = dimensions.count().get_result(&mut conn)?; + let n_dimensions: i64 = dimension_table.count().get_result(&mut conn)?; let limit = filters.count.unwrap_or(10); - let mut builder = dimensions + let mut builder = dimension_table .into_boxed() .order(created_at.desc()) .limit(limit); @@ -173,23 +178,22 @@ async fn delete_dimension( ) -> superposition::Result { let name: String = path.into_inner().into(); let DbConnection(mut conn) = db_conn; - dimensions::dsl::dimensions - .filter(dimensions::dimension.eq(&name)) + dimension_table + .filter(dimension.eq(&name)) .select(Dimension::as_select()) .get_result(&mut conn)?; let context_ids = get_dimension_usage_context_ids(&name, &mut conn) .map_err(|_| unexpected_error!("Something went wrong"))?; if context_ids.is_empty() { conn.transaction::<_, superposition::AppError, _>(|transaction_conn| { - use dimensions::dsl; - diesel::update(dsl::dimensions) - .filter(dsl::dimension.eq(&name)) + diesel::update(dimension_table) + .filter(dimension.eq(&name)) .set(( - dsl::last_modified_at.eq(Utc::now().naive_utc()), - dsl::last_modified_by.eq(user.get_email()), + last_modified_at.eq(Utc::now().naive_utc()), + last_modified_by.eq(user.get_email()), )) .execute(transaction_conn)?; - let deleted_row = delete(dsl::dimensions.filter(dsl::dimension.eq(&name))) + let deleted_row = delete(dimension_table.filter(dimension.eq(&name))) .execute(transaction_conn); match deleted_row { Ok(0) => Err(not_found!("Dimension `{}` doesn't exists", name)), diff --git a/crates/context_aware_config/src/api/dimension/types.rs b/crates/context_aware_config/src/api/dimension/types.rs index 11adb6bb..2fa0e0eb 100644 --- a/crates/context_aware_config/src/api/dimension/types.rs +++ b/crates/context_aware_config/src/api/dimension/types.rs @@ -13,6 +13,8 @@ pub struct CreateReq { pub schema: Value, #[serde(default, deserialize_with = "deserialize_option")] pub function_name: Option, + pub description: Option, + pub comment: Option, } #[derive(Debug, Deserialize, AsRef, Deref, DerefMut, Into)] @@ -72,6 +74,8 @@ pub struct DimensionWithMandatory { pub function_name: Option, pub last_modified_at: NaiveDateTime, pub last_modified_by: String, + pub description: Option, + pub comment: Option, pub mandatory: bool, } @@ -86,6 +90,8 @@ impl DimensionWithMandatory { function_name: value.function_name, last_modified_at: value.last_modified_at, last_modified_by: value.last_modified_by, + description: value.description, + comment: value.comment, mandatory, } } diff --git a/crates/context_aware_config/src/api/functions/handlers.rs b/crates/context_aware_config/src/api/functions/handlers.rs index 32ff7639..a24e9a7c 100644 --- a/crates/context_aware_config/src/api/functions/handlers.rs +++ b/crates/context_aware_config/src/api/functions/handlers.rs @@ -63,7 +63,7 @@ async fn create( published_at: None, published_by: None, published_runtime_version: None, - function_description: req.description, + description: req.description, last_modified_at: Utc::now().naive_utc(), last_modified_by: user.get_email(), }; @@ -136,7 +136,7 @@ async fn update( draft_runtime_version: req .runtime_version .unwrap_or(result.draft_runtime_version), - function_description: req.description.unwrap_or(result.function_description), + description: req.description.unwrap_or(result.description), draft_edited_by: user.get_email(), draft_edited_at: Utc::now().naive_utc(), published_code: result.published_code, diff --git a/crates/context_aware_config/src/api/type_templates/handlers.rs b/crates/context_aware_config/src/api/type_templates/handlers.rs index c195777c..b6c68406 100644 --- a/crates/context_aware_config/src/api/type_templates/handlers.rs +++ b/crates/context_aware_config/src/api/type_templates/handlers.rs @@ -43,12 +43,16 @@ async fn create_type( ) })?; let type_name: String = request.type_name.clone().into(); + let description = request.description.clone(); + let comment = request.comment.clone(); let type_template = diesel::insert_into(type_templates::table) .values(( type_templates::type_schema.eq(request.type_schema.clone()), type_templates::type_name.eq(type_name), type_templates::created_by.eq(user.email.clone()), type_templates::last_modified_by.eq(user.email.clone()), + type_templates::description.eq(description), + type_templates::comment.eq(comment), )) .get_result::(&mut conn) .map_err(|err| { diff --git a/crates/context_aware_config/src/api/type_templates/types.rs b/crates/context_aware_config/src/api/type_templates/types.rs index d7cbbd1f..12d25344 100644 --- a/crates/context_aware_config/src/api/type_templates/types.rs +++ b/crates/context_aware_config/src/api/type_templates/types.rs @@ -7,6 +7,8 @@ use superposition_types::RegexEnum; pub struct TypeTemplateRequest { pub type_schema: Value, pub type_name: TypeTemplateName, + pub description: Option, + pub comment: Option, } #[derive(Serialize, Deserialize, Clone, Debug)] @@ -16,6 +18,8 @@ pub struct TypeTemplateResponse { pub created_at: String, pub last_modified: String, pub created_by: String, + pub description: Option, + pub comment: Option, } #[derive(Debug, Deserialize, Serialize, AsRef, Deref, DerefMut, Into, Clone)] diff --git a/crates/context_aware_config/src/db/models.rs b/crates/context_aware_config/src/db/models.rs index a0425793..1c19a4ee 100644 --- a/crates/context_aware_config/src/db/models.rs +++ b/crates/context_aware_config/src/db/models.rs @@ -22,6 +22,8 @@ pub struct Context { pub override_: Overrides, pub last_modified_at: NaiveDateTime, pub last_modified_by: String, + pub description: Option, + pub comment: Option, } impl Contextual for Context { @@ -49,6 +51,8 @@ pub struct Dimension { pub function_name: Option, pub last_modified_at: NaiveDateTime, pub last_modified_by: String, + pub description: Option, + pub comment: Option, } #[derive(Queryable, Selectable, Insertable, AsChangeset, Serialize, Clone)] @@ -64,6 +68,8 @@ pub struct DefaultConfig { pub function_name: Option, pub last_modified_at: NaiveDateTime, pub last_modified_by: String, + pub description: Option, + pub comment: Option, } #[derive(Queryable, Selectable, Insertable, AsChangeset, Serialize, Clone, Debug)] @@ -73,7 +79,7 @@ pub struct Function { pub function_name: String, pub published_code: Option, pub draft_code: String, - pub function_description: String, + pub description: String, pub published_runtime_version: Option, pub draft_runtime_version: String, pub published_at: Option, @@ -121,4 +127,6 @@ pub struct TypeTemplates { pub created_at: NaiveDateTime, pub last_modified_at: NaiveDateTime, pub last_modified_by: String, + pub description: Option, + pub comment: Option, } diff --git a/crates/context_aware_config/src/db/schema.rs b/crates/context_aware_config/src/db/schema.rs index 70e80901..12ad7c72 100644 --- a/crates/context_aware_config/src/db/schema.rs +++ b/crates/context_aware_config/src/db/schema.rs @@ -1,5 +1,15 @@ // @generated automatically by Diesel CLI. +pub mod sql_types { + #[derive(diesel::sql_types::SqlType)] + #[diesel(postgres_type(name = "experiment_status_type"))] + pub struct ExperimentStatusType; + + #[derive(diesel::sql_types::SqlType)] + #[diesel(postgres_type(name = "not_null_text"))] + pub struct NotNullText; +} + diesel::table! { config_versions (id) { id -> Int8, @@ -23,6 +33,8 @@ diesel::table! { last_modified_at -> Timestamp, #[max_length = 200] last_modified_by -> Varchar, + description -> Nullable, + comment -> Nullable, } } @@ -37,6 +49,8 @@ diesel::table! { last_modified_at -> Timestamp, #[max_length = 200] last_modified_by -> Varchar, + description -> Nullable, + comment -> Nullable, } } @@ -51,6 +65,8 @@ diesel::table! { last_modified_at -> Timestamp, #[max_length = 200] last_modified_by -> Varchar, + description -> Nullable, + comment -> Nullable, } } @@ -600,12 +616,33 @@ diesel::table! { } } +diesel::table! { + use diesel::sql_types::*; + use super::sql_types::NotNullText; + use super::sql_types::ExperimentStatusType; + + experiments (id) { + id -> Int8, + created_at -> Timestamptz, + created_by -> Text, + last_modified -> Timestamptz, + name -> Text, + override_keys -> Array>, + status -> ExperimentStatusType, + traffic_percentage -> Int4, + context -> Json, + variants -> Json, + last_modified_by -> Text, + chosen_variant -> Nullable, + } +} + diesel::table! { functions (function_name) { function_name -> Text, published_code -> Nullable, draft_code -> Text, - function_description -> Text, + description -> Text, #[max_length = 16] published_runtime_version -> Nullable, #[max_length = 16] @@ -629,6 +666,8 @@ diesel::table! { last_modified_at -> Timestamp, #[max_length = 200] last_modified_by -> Varchar, + description -> Nullable, + comment -> Nullable, } } @@ -682,6 +721,7 @@ diesel::allow_tables_to_appear_in_same_query!( event_log_y2026m10, event_log_y2026m11, event_log_y2026m12, + experiments, functions, type_templates, ); diff --git a/postman/cac.postman_collection.json b/postman/cac.postman_collection.json index cf507ed1..09579804 100644 --- a/postman/cac.postman_collection.json +++ b/postman/cac.postman_collection.json @@ -477,7 +477,7 @@ " \"body\": {", " \"mode\": \"raw\",", " \"raw\": JSON.stringify({", - " \"dimension\": \"dim1\",", + " \"dimension\": \"dim1\",", " \"priority\": 4,", " \"schema\": {", " \"type\": \"string\",", @@ -514,20 +514,21 @@ "})", "", "pm.test(\"404 check\", function () {", - " const deleteRequest = {", - " url: `${host}/dimension/dim1`,", - " method: 'DELETE',", - " header: {", - " 'Content-Type': 'application/json',", - " 'x-tenant': 'test',", - " 'Authorization': `Bearer ${token}`", - " }", - " };", - "", - " pm.sendRequest(deleteRequest, (error, response) => {", - " response.to.have.status(404);", - " });", - "})" + " const deleteRequest = {", + " url: `${host}/dimension/dim1`,", + " method: 'DELETE',", + " header: {", + " 'Content-Type': 'application/json',", + " 'x-tenant': 'test',", + " 'Authorization': `Bearer ${token}`", + " }", + " };", + "", + " pm.sendRequest(deleteRequest, (error, response) => {", + " response.to.have.status(404);", + " });", + "})", + "" ], "type": "text/javascript" } @@ -562,8 +563,7 @@ "dim1" ] } - }, - "response": [] + } } ] }, @@ -1002,6 +1002,8 @@ " delete response.created_by;", " delete response.last_modified_at;", " delete response.last_modified_by;", + " delete response.description;", + " delete response.comment;", "", " pm.expect(JSON.stringify(response)).to.be.eq(JSON.stringify(expected_context));", "});", @@ -1334,46 +1336,55 @@ "pm.test('expect response be 200', function () {", " pm.response.to.be.ok;", " const response = pm.response.json();", - " const modified_response = response.data.map(({ created_at, last_modified, ...rest }) => rest);", + " const modified_response = response.data.map(({ created_at, last_modified_at, last_modified_by, ...rest }) => rest);", " console.log(\"The API returned the response\", modified_response);", " pm.expect(JSON.stringify(modified_response)).to.be.eq(JSON.stringify([", " {", - " \"created_by\": \"user@superposition.io\",", - " \"type_name\": \"Number\",", + " \"type_name\": \"Pattern\",", " \"type_schema\": {", - " \"type\": \"integer\"", - " }", + " \"pattern\": \".*\",", + " \"type\": \"string\"", + " },", + " \"created_by\": \"user@superposition.io\",", + " \"description\": null,", + " \"comment\": null ", " },", " {", - " \"created_by\": \"user@superposition.io\",", - " \"type_name\": \"Decimal\",", + " \"type_name\": \"Enum\",", " \"type_schema\": {", - " \"type\": \"number\"", - " }", + " \"enum\": [\"android\", \"ios\"],", + " \"type\": \"string\"", + " },", + " \"created_by\": \"user@superposition.io\",", + " \"description\": null,", + " \"comment\": null ", " },", " {", - " \"created_by\": \"user@superposition.io\",", " \"type_name\": \"Boolean\",", " \"type_schema\": {", " \"type\": \"boolean\"", - " }", + " },", + " \"created_by\": \"user@superposition.io\",", + " \"description\": null,", + " \"comment\": null ", " },", " {", - " \"created_by\": \"user@superposition.io\",", - " \"type_name\": \"Enum\",", + " \"type_name\": \"Decimal\",", " \"type_schema\": {", - " \"enum\": [\"android\", \"ios\"],", - " \"type\": \"string\"", - " }", + " \"type\": \"number\"", + " },", + " \"created_by\": \"user@superposition.io\",", + " \"description\": null,", + " \"comment\": null ", " },", - "", " {", - " \"created_by\": \"user@superposition.io\",", - " \"type_name\": \"Pattern\",", + " \"type_name\": \"Number\",", " \"type_schema\": {", - " \"pattern\": \".*\",", - " \"type\": \"string\"", - " }", + " \"type\": \"integer\"", + " },", + " \"created_by\": \"user@superposition.io\",", + " \"description\": null,", + " \"comment\": null ", " }", " ]))", "});", @@ -1439,7 +1450,7 @@ " throw error;", " }", " const resp = response.json();", - " const modified_response = resp.map(({ created_at, last_modified, ...rest }) => rest).sort((a, b) => {", + " const modified_response = resp.map(({ created_at, last_modified_at, last_modified_by, ...rest }) => rest).sort((a, b) => {", " return a.type_name > b.type_name;", " });", " pm.expect(JSON.stringify(modified_response)).to.be.eq(JSON.stringify([", diff --git a/postman/cac/Context/Get Context/event.test.js b/postman/cac/Context/Get Context/event.test.js index a8553581..f62918ab 100644 --- a/postman/cac/Context/Get Context/event.test.js +++ b/postman/cac/Context/Get Context/event.test.js @@ -26,6 +26,8 @@ pm.test("Context equality check", function() { delete response.created_by; delete response.last_modified_at; delete response.last_modified_by; + delete response.description; + delete response.comment; pm.expect(JSON.stringify(response)).to.be.eq(JSON.stringify(expected_context)); }); diff --git a/postman/cac/custom types/Get Types/event.test.js b/postman/cac/custom types/Get Types/event.test.js index f3b58c04..7d5eae2e 100644 --- a/postman/cac/custom types/Get Types/event.test.js +++ b/postman/cac/custom types/Get Types/event.test.js @@ -13,6 +13,8 @@ pm.test('expect response be 200', function () { "type": "string" }, "created_by": "user@superposition.io", + "description": null, + "comment": null }, { "type_name": "Enum", @@ -21,6 +23,8 @@ pm.test('expect response be 200', function () { "type": "string" }, "created_by": "user@superposition.io", + "description": null, + "comment": null }, { "type_name": "Boolean", @@ -28,6 +32,8 @@ pm.test('expect response be 200', function () { "type": "boolean" }, "created_by": "user@superposition.io", + "description": null, + "comment": null }, { "type_name": "Decimal", @@ -35,6 +41,8 @@ pm.test('expect response be 200', function () { "type": "number" }, "created_by": "user@superposition.io", + "description": null, + "comment": null }, { "type_name": "Number", @@ -42,6 +50,8 @@ pm.test('expect response be 200', function () { "type": "integer" }, "created_by": "user@superposition.io", + "description": null, + "comment": null } ])) });