2022-09-28 17:28:18 +00:00
import app , { RTS_BASE_API_PATH } from "../server" ;
import supertest from "supertest" ;
const singleScript = {
script :
"(function abc() { let Api2 = { }; return Api2.data ? str.data + Api1.data : [] })()" ,
} ;
const multipleScripts = {
scripts : [
"(function abc() { return Api1.data })() " ,
"(function abc() { let str = ''; return str ? Api1.data : [] })()" ,
] ,
} ;
2022-10-18 06:37:06 +00:00
const entityRefactor = [
{
script : "ApiNever" ,
oldName : "ApiNever" ,
newName : "ApiForever" ,
2022-10-26 14:53:06 +00:00
isJSObject : false ,
evalVersion : 2 ,
2022-10-18 06:37:06 +00:00
} ,
{
script : "ApiNever.data" ,
oldName : "ApiNever" ,
newName : "ApiForever" ,
2022-10-26 14:53:06 +00:00
isJSObject : false ,
2022-10-18 06:37:06 +00:00
} ,
{
script :
"// ApiNever \n function ApiNever(abc) {let foo = \"I'm getting data from ApiNever but don't rename this string\" + ApiNever.data; \n if(true) { return ApiNever }}" ,
oldName : "ApiNever" ,
newName : "ApiForever" ,
2022-10-26 14:53:06 +00:00
isJSObject : false ,
evalVersion : 2 ,
2022-10-18 06:37:06 +00:00
} ,
{
script :
"//ApiNever \n function ApiNever(abc) {let ApiNever = \"I'm getting data from ApiNever but don't rename this string\" + ApiNever.data; \n if(true) { return ApiNever }}" ,
oldName : "ApiNever" ,
newName : "ApiForever" ,
2022-10-26 14:53:06 +00:00
isJSObject : false ,
} ,
{
script :
"export default {\n\tmyVar1: [],\n\tmyVar2: {},\n\t\tsearch: () => {\n\t\tif(Input1Copy.text.length==0){\n\t\t\treturn select_repair_db.data\n\t\t}\n\t\telse{\n\t\t\treturn(select_repair_db.data.filter(word => word.cust_name.toLowerCase().includes(Input1Copy.text.toLowerCase())))\n\t\t}\n\t},\n}" ,
oldName : "Input1Copy" ,
newName : "Input1" ,
isJSObject : true ,
evalVersion : 2 ,
2022-10-18 06:37:06 +00:00
} ,
2022-12-12 05:12:21 +00:00
{
script :
"// ApiNever \n function ApiNever(abc) {let foo = \"I'm getting data from ApiNever but don't rename this string\" + ApiNever.data; \n if(true) { return ApiNever }}" ,
oldName : "ApiNever.data" ,
newName : "ApiNever.input" ,
isJSObject : false ,
evalVersion : 2 ,
} ,
{
script :
"// ApiNever \n function ApiNever(abc) {let foo = \"I'm getting data from ApiNever but don't rename this string\" + ApiNever.data; \n if(true) { return ApiNever }}" ,
oldName : "ApiNever.dat" ,
newName : "ApiNever.input" ,
isJSObject : false ,
evalVersion : 2 ,
} ,
{
script : "\tApiNever.data" ,
oldName : "ApiNever" ,
newName : "ApiForever" ,
isJSObject : false ,
evalVersion : 2 ,
} ,
{
script : "ApiNever.data + ApiNever.data" ,
oldName : "ApiNever" ,
newName : "ApiForever" ,
isJSObject : false ,
evalVersion : 2 ,
} ,
{
script :
'export default {\n\tmyVar1: [],\n\tmyVar2: {},\n\tmyFun1: () => {\n\t\t//write code here\n\t\t// ApiNever.text\n\t\treturn "ApiNever.text" + ApiNever.text\n\t},\n\tmyFun2: async () => {\n\t\t//use async-await or promises\n\t\t// ApiNever.text\n\t\treturn "ApiNever.text" + ApiNever.text\n\t}\n}' ,
oldName : "ApiNever" ,
newName : "ApiForever" ,
isJSObject : true ,
evalVersion : 2 ,
} ,
2022-10-18 06:37:06 +00:00
] ;
2022-09-28 17:28:18 +00:00
afterAll ( ( done ) = > {
app . close ( ) ;
done ( ) ;
} ) ;
describe ( "AST tests" , ( ) = > {
it ( "Checks to see if single script is parsed correctly using the API" , async ( ) = > {
const expectedResponse = {
references : [ "str.data" , "Api1.data" ] ,
functionalParams : [ ] ,
variables : [ "Api2" ] ,
} ;
await supertest ( app )
. post ( ` ${ RTS_BASE_API_PATH } /ast/single-script-data ` , {
JSON : true ,
} )
. send ( singleScript )
. expect ( 200 )
. then ( ( response ) = > {
expect ( response . body . success ) . toEqual ( true ) ;
expect ( response . body . data ) . toEqual ( expectedResponse ) ;
} ) ;
} ) ;
it ( "Checks to see if multiple scripts are parsed correctly using the API" , async ( ) = > {
const expectedResponse = [
{
references : [ "Api1.data" ] ,
functionalParams : [ ] ,
variables : [ ] ,
} ,
{
references : [ "Api1.data" ] ,
functionalParams : [ ] ,
variables : [ "str" ] ,
} ,
] ;
await supertest ( app )
. post ( ` ${ RTS_BASE_API_PATH } /ast/multiple-script-data ` , {
JSON : true ,
} )
. send ( multipleScripts )
. expect ( 200 )
. then ( ( response ) = > {
expect ( response . body . success ) . toEqual ( true ) ;
expect ( response . body . data . length ) . toBeGreaterThan ( 1 ) ;
expect ( response . body . data ) . toEqual ( expectedResponse ) ;
} ) ;
} ) ;
2022-10-18 06:37:06 +00:00
entityRefactor . forEach ( async ( input , index ) = > {
it ( ` Entity refactor test case ${ index + 1 } ` , async ( ) = > {
const expectedResponse = [
2022-10-26 14:53:06 +00:00
{ script : "ApiForever" , refactorCount : 1 } ,
{ script : "ApiForever.data" , refactorCount : 1 } ,
2022-10-18 06:37:06 +00:00
{
script :
"// ApiNever \n function ApiNever(abc) {let foo = \"I'm getting data from ApiNever but don't rename this string\" + ApiForever.data; \n if(true) { return ApiForever }}" ,
2022-10-26 14:53:06 +00:00
refactorCount : 2 ,
2022-10-18 06:37:06 +00:00
} ,
{
script :
"//ApiNever \n function ApiNever(abc) {let ApiNever = \"I'm getting data from ApiNever but don't rename this string\" + ApiNever.data; \n if(true) { return ApiNever }}" ,
2022-10-26 14:53:06 +00:00
refactorCount : 0 ,
} ,
{
script :
"export default {\n\tmyVar1: [],\n\tmyVar2: {},\n\t\tsearch: () => {\n\t\tif(Input1.text.length==0){\n\t\t\treturn select_repair_db.data\n\t\t}\n\t\telse{\n\t\t\treturn(select_repair_db.data.filter(word => word.cust_name.toLowerCase().includes(Input1.text.toLowerCase())))\n\t\t}\n\t},\n}" ,
refactorCount : 2 ,
2022-10-18 06:37:06 +00:00
} ,
2022-12-12 05:12:21 +00:00
{
script :
"// ApiNever \n function ApiNever(abc) {let foo = \"I'm getting data from ApiNever but don't rename this string\" + ApiNever.input; \n if(true) { return ApiNever }}" ,
refactorCount : 1 ,
} ,
{
script :
"// ApiNever \n function ApiNever(abc) {let foo = \"I'm getting data from ApiNever but don't rename this string\" + ApiNever.data; \n if(true) { return ApiNever }}" ,
refactorCount : 0 ,
} ,
{
script : "\tApiForever.data" ,
refactorCount : 1 ,
} ,
{
script : "ApiForever.data + ApiForever.data" ,
refactorCount : 2 ,
} ,
{
script :
'export default {\n\tmyVar1: [],\n\tmyVar2: {},\n\tmyFun1: () => {\n\t\t//write code here\n\t\t// ApiNever.text\n\t\treturn "ApiNever.text" + ApiForever.text\n\t},\n\tmyFun2: async () => {\n\t\t//use async-await or promises\n\t\t// ApiNever.text\n\t\treturn "ApiNever.text" + ApiForever.text\n\t}\n}' ,
refactorCount : 2 ,
} ,
2022-10-18 06:37:06 +00:00
] ;
await supertest ( app )
. post ( ` ${ RTS_BASE_API_PATH } /ast/entity-refactor ` , {
JSON : true ,
} )
. send ( input )
. expect ( 200 )
. then ( ( response ) = > {
expect ( response . body . success ) . toEqual ( true ) ;
expect ( response . body . data . script ) . toEqual (
expectedResponse [ index ] . script
) ;
2022-10-26 14:53:06 +00:00
expect ( response . body . data . refactorCount ) . toEqual (
expectedResponse [ index ] . refactorCount
2022-10-18 06:37:06 +00:00
) ;
} ) ;
} ) ;
} ) ;
2022-10-26 14:53:06 +00:00
it ( "Entity refactor syntax error" , async ( ) = > {
let request = {
script : "ApiNever++++" ,
oldName : "ApiNever" ,
newName : "ApiForever" ,
isJSObject : true ,
evalVersion : 2 ,
} ;
await supertest ( app )
. post ( ` ${ RTS_BASE_API_PATH } /ast/entity-refactor ` , {
JSON : true ,
} )
. send ( request )
. expect ( 200 )
. then ( ( response ) = > {
expect ( response . body . success ) . toEqual ( false ) ;
expect ( response . body . data . error ) . toEqual ( "Syntax Error" ) ;
} ) ;
} ) ;
2022-09-28 17:28:18 +00:00
} ) ;