@@ -5,6 +5,7 @@ import { exhaustive } from '@/utils/typescript'
55
66type CheckValue = string | number
77
8+ // TODO: this is redundant
89function getValueFromRule (
910 rule : VerificationRule ,
1011 response : RequestSnippetSchema [ 'data' ] [ 'response' ]
@@ -28,19 +29,34 @@ const getExpectedValue = (
2829 rule : VerificationRule ,
2930 value : CheckValue
3031) : CheckValue => {
31- switch ( rule . target ) {
32- case 'status' :
33- return rule . value . type === 'variable' ? `Number(${ value } )` : value
34- case 'body' :
35- return rule . value . type === 'variable' ? value : `'${ value } '`
32+ switch ( rule . value . type ) {
33+ case 'recordedValue' :
34+ return rule . target === 'status'
35+ ? value
36+ : `String.raw\`${ escapeBackticksAndDollarSign ( value . replace ( / (?: \r \n | \r | \n ) / g, '' ) ) } \``
37+ case 'string' :
38+ return rule . target === 'status' ? value : `'${ value } '`
39+ case 'variable' :
40+ return rule . target === 'status' ? `Number(${ value } )` : value
3641 default :
37- return exhaustive ( rule . target )
42+ return exhaustive ( rule . value )
3843 }
3944}
4045
46+ function getTarget ( rule : VerificationRule ) {
47+ const property = rule . target === 'status' ? 'r.status' : 'r.body'
48+
49+ if ( rule . value . type === 'recordedValue' && rule . target === 'body' ) {
50+ return `${ property } .replace(/(?:\\r\\n|\\r|\\n)/g, '')`
51+ }
52+
53+ return property
54+ }
55+
4156function getCheckExpression ( rule : VerificationRule , value : CheckValue ) : string {
42- const target = rule . target === 'status' ? 'r.status' : 'r.body'
57+ const target = getTarget ( rule )
4358 const expectedValue = getExpectedValue ( rule , value )
59+ console . log ( 'expectedValue' , expectedValue )
4460
4561 switch ( rule . operator ) {
4662 case 'equals' :
@@ -54,14 +70,24 @@ function getCheckExpression(rule: VerificationRule, value: CheckValue): string {
5470 }
5571}
5672
73+ function getValueDescription ( rule : VerificationRule , value : CheckValue ) {
74+ switch ( rule . value . type ) {
75+ case 'recordedValue' :
76+ return rule . target === 'body' ? 'recorded value' : value
77+ case 'string' :
78+ return value
79+ case 'variable' :
80+ return `variable "${ rule . value . variableName } "`
81+ default :
82+ return exhaustive ( rule . value )
83+ }
84+ }
85+
5786function getCheckDescription (
5887 rule : VerificationRule ,
5988 value : CheckValue
6089) : string {
61- const valueDescription =
62- rule . value . type === 'variable'
63- ? `variable "${ rule . value . variableName } "`
64- : value
90+ const valueDescription = getValueDescription ( rule , value )
6591
6692 switch ( rule . operator ) {
6793 case 'equals' :
@@ -115,3 +141,8 @@ export function createVerificationRuleInstance(
115141 } ,
116142 }
117143}
144+
145+ // Without escaping, backticks and dollar sign break the String.raw template literal
146+ function escapeBackticksAndDollarSign ( str : string ) {
147+ return str . replace ( / \$ / g, '${"$"}' ) . replace ( / ` / g, '${"`"}' )
148+ }
0 commit comments