Skip to content

Commit 9c1394e

Browse files
committed
Release 0.41.0
Major Refactoring to fix Dependencies Signed-off-by: Gopal S Akshintala <[email protected]>
1 parent 93a5456 commit 9c1394e

File tree

26 files changed

+385
-395
lines changed

26 files changed

+385
-395
lines changed

.idea/cody_history.xml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/kotlinc.xml

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/ktfmt.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 1 addition & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ endif::[]
1818
:pmtemplates: src/integrationTest/resources/pm-templates
1919
:imagesdir: docs/images
2020
:prewrap!:
21-
:revoman-version: 0.40.4
21+
:revoman-version: 0.41.0
2222

2323
'''
2424

buildSrc/src/main/kotlin/Config.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
* ************************************************************************************************
77
*/
88
const val GROUP_ID = "com.salesforce.revoman"
9-
const val VERSION = "0.40.4"
9+
const val VERSION = "0.41.0"
1010
const val ARTIFACT_ID = "revoman"
1111
const val STAGING_PROFILE_ID = "1ea0a23e61ba7d"

src/main/kotlin/com/salesforce/revoman/ReVoman.kt

Lines changed: 52 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import arrow.core.flatMap
1313
import arrow.core.merge
1414
import com.salesforce.revoman.input.bufferFileInResources
1515
import com.salesforce.revoman.input.config.Kick
16-
import com.salesforce.revoman.input.initJSContext
1716
import com.salesforce.revoman.internal.exe.deepFlattenItems
1817
import com.salesforce.revoman.internal.exe.executePreReqJS
1918
import com.salesforce.revoman.internal.exe.executeTestsJS
@@ -30,12 +29,10 @@ import com.salesforce.revoman.internal.postman.PostmanSDK
3029
import com.salesforce.revoman.internal.postman.RegexReplacer
3130
import com.salesforce.revoman.internal.postman.dynamicVariableGenerator
3231
import com.salesforce.revoman.internal.postman.mergeEnvs
33-
import com.salesforce.revoman.internal.postman.pm
3432
import com.salesforce.revoman.internal.postman.template.Template
3533
import com.salesforce.revoman.output.Rundown
3634
import com.salesforce.revoman.output.report.Step
3735
import com.salesforce.revoman.output.report.StepReport
38-
import com.salesforce.revoman.output.report.StepReport.Companion.toArrow
3936
import com.salesforce.revoman.output.report.StepReport.Companion.toVavr
4037
import com.salesforce.revoman.output.report.TxnInfo
4138
import com.squareup.moshi.Moshi
@@ -49,7 +46,6 @@ object ReVoman {
4946
@JvmStatic
5047
@OptIn(ExperimentalStdlibApi::class)
5148
fun revUp(kick: Kick): Rundown {
52-
val environment = mergeEnvs(kick.environmentPaths(), kick.dynamicEnvironmentsFlattened())
5349
val pmTemplateAdapter = Moshi.Builder().build().adapter<Template>()
5450
val pmStepsDeepFlattened =
5551
kick
@@ -62,33 +58,34 @@ object ReVoman {
6258
val templateCount = kick.templatePaths().size
6359
"Total Steps from ${if (templateCount > 1) "$templateCount Collections" else "the Collection"} provided: ${pmStepsDeepFlattened.size}"
6460
}
65-
val stepNameToReport =
66-
executeStepsSerially(
67-
pmStepsDeepFlattened,
68-
environment,
69-
kick,
70-
initMoshi(
71-
kick.customAdapters(),
72-
kick.customAdaptersFromRequestConfig() + kick.customAdaptersFromResponseConfig(),
73-
kick.skipTypes()
74-
)
61+
val regexReplacer =
62+
RegexReplacer(kick.customDynamicVariableGenerators(), ::dynamicVariableGenerator)
63+
val moshiReVoman =
64+
initMoshi(
65+
kick.customAdapters(),
66+
kick.customAdaptersFromRequestConfig() + kick.customAdaptersFromResponseConfig(),
67+
kick.skipTypes()
7568
)
76-
return Rundown(stepNameToReport, kick.haltOnFailureOfTypeExcept())
69+
val environment = mergeEnvs(kick.environmentPaths(), kick.dynamicEnvironmentsFlattened())
70+
val pm =
71+
PostmanSDK(
72+
moshiReVoman,
73+
kick.nodeModulesRelativePath(),
74+
regexReplacer,
75+
environment.toMutableMap(),
76+
)
77+
val stepNameToReport =
78+
executeStepsSerially(pmStepsDeepFlattened, kick, moshiReVoman, regexReplacer, pm)
79+
return Rundown(stepNameToReport, kick.haltOnFailureOfTypeExcept(), pm.environment)
7780
}
7881

7982
private fun executeStepsSerially(
8083
pmStepsFlattened: List<Step>,
81-
environment: Map<String, String?>,
8284
kick: Kick,
8385
moshiReVoman: ConfigurableMoshi,
86+
regexReplacer: RegexReplacer,
87+
pm: PostmanSDK
8488
): List<StepReport> {
85-
val regexReplacer =
86-
RegexReplacer(kick.customDynamicVariableGenerators(), ::dynamicVariableGenerator)
87-
// ! TODO 17 Mar 2024 gopala.akshintala: Streamline global mutable state `pm`
88-
pm = PostmanSDK(regexReplacer)
89-
pm.environment.clear()
90-
pm.environment.putAll(environment)
91-
initJSContext(kick.nodeModulesRelativePath())
9289
var haltExecution = false
9390
return pmStepsFlattened
9491
.asSequence()
@@ -97,72 +94,69 @@ object ReVoman {
9794
.fold(listOf()) { stepReports, step ->
9895
logger.info { "***** Executing Step: $step *****" }
9996
val itemWithRegex = step.rawPMStep
100-
pm.info = Info(step.name)
101-
val stepReport =
97+
val preStepReport =
10298
StepReport(step, Right(TxnInfo(httpMsg = itemWithRegex.request.toHttpRequest())))
103-
val rundown = Rundown(stepReports + stepReport, kick.haltOnFailureOfTypeExcept())
104-
pm.currentStepReport = stepReport
105-
pm.rundown = rundown
106-
pm.environment.putAll(regexReplacer.replaceVariablesInEnv(stepReport, rundown))
107-
regexReplacer.replaceVariablesInRequest(itemWithRegex.request, stepReport, rundown)
99+
pm.info = Info(step.name)
100+
pm.currentStepReport = preStepReport
101+
pm.rundown =
102+
Rundown(stepReports + preStepReport, kick.haltOnFailureOfTypeExcept(), pm.environment)
103+
pm.environment.putAll(regexReplacer.replaceVariablesInEnv(pm))
108104
val currentStepReport: StepReport = // --------### PRE-REQUEST-JS ###--------
109-
executePreReqJS(step, itemWithRegex, stepReport)
110-
.mapLeft { stepReport.copy(requestInfo = left(it)) }
105+
executePreReqJS(step, itemWithRegex, pm)
106+
.mapLeft { preStepReport.copy(requestInfo = left(it)) }
111107
.flatMap { // --------### UNMARSHALL-REQUEST ###--------
112-
val pmRequest: com.salesforce.revoman.internal.postman.template.Request =
113-
regexReplacer.replaceVariablesInRequest(itemWithRegex.request, stepReport, rundown)
114-
unmarshallRequest(step, pmRequest, kick, moshiReVoman, stepReports).mapLeft {
115-
StepReport(step, Left(it))
108+
val pmRequest =
109+
regexReplacer.replaceVariablesInRequestRecursively(itemWithRegex.request, pm)
110+
unmarshallRequest(step, pmRequest, kick, moshiReVoman, pm).mapLeft {
111+
preStepReport.copy(requestInfo = left(it))
116112
}
117113
}
118114
.flatMap { requestInfo: TxnInfo<Request> -> // --------### PRE-HOOKS ###--------
119-
preHookExe(step, kick, requestInfo, stepReports)?.let {
120-
Left(StepReport(step, Right(requestInfo), it))
121-
} ?: Right(StepReport(step, Right(requestInfo)))
115+
preHookExe(step, kick, requestInfo, pm)?.let {
116+
Left(
117+
preStepReport.copy(requestInfo = Right(requestInfo).toVavr(), preHookFailure = it)
118+
)
119+
} ?: Right(preStepReport.copy(requestInfo = Right(requestInfo).toVavr()))
122120
}
123121
.flatMap { sr: StepReport -> // --------### HTTP-REQUEST ###--------
124-
val item =
125-
regexReplacer.replaceVariablesInPmItem(
126-
itemWithRegex,
127-
sr,
128-
Rundown(stepReports + sr, kick.haltOnFailureOfTypeExcept())
129-
)
122+
pm.currentStepReport = sr
123+
pm.rundown = pm.rundown.copy(stepReports = pm.rundown.stepReports + sr)
124+
val item = regexReplacer.replaceVariablesInPmItem(itemWithRegex, pm)
130125
val httpRequest = item.request.toHttpRequest()
131126
fireHttpRequest(step, item.auth, httpRequest, kick.insecureHttp())
132-
.mapLeft { StepReport(step, Left(it)) }
127+
.mapLeft { sr.copy(requestInfo = Left(it).toVavr()) }
133128
.map {
134-
StepReport(
135-
step,
136-
sr.requestInfo?.toArrow()?.map { txnInfo ->
137-
txnInfo.copy(httpMsg = httpRequest)
138-
},
139-
null,
140-
Right(it)
129+
sr.copy(
130+
requestInfo =
131+
sr.requestInfo?.map { txnInfo -> txnInfo.copy(httpMsg = httpRequest) },
132+
responseInfo = Right(it).toVavr(),
141133
)
142134
}
143135
}
144136
.flatMap { sr: StepReport -> // --------### TESTS-JS ###--------
145137
pm.currentStepReport = sr
146-
pm.rundown = Rundown(stepReports + sr, kick.haltOnFailureOfTypeExcept())
147-
executeTestsJS(step, itemWithRegex, sr)
138+
pm.rundown = pm.rundown.copy(stepReports = pm.rundown.stepReports + sr)
139+
executeTestsJS(step, itemWithRegex, pm)
148140
.mapLeft { sr.copy(responseInfo = left(it)) }
149141
.map { sr }
150142
}
151143
.flatMap { sr: StepReport -> // ---### UNMARSHALL RESPONSE ###---
152-
unmarshallResponse(sr, kick, moshiReVoman, stepReports)
144+
unmarshallResponse(kick, moshiReVoman, pm)
153145
.mapLeft { sr.copy(responseInfo = Left(it).toVavr()) }
154146
.map { sr.copy(responseInfo = Right(it).toVavr()) }
155147
}
156148
.map { sr: StepReport -> // --------### POST-HOOKS ###--------
157-
sr.copy(postHookFailure = postHookExe(sr, kick, stepReports + sr))
149+
pm.currentStepReport = sr
150+
pm.rundown = pm.rundown.copy(stepReports = pm.rundown.stepReports + sr)
151+
sr.copy(postHookFailure = postHookExe(kick, pm))
158152
}
159153
.merge()
160154
.copy(
161155
envSnapshot =
162156
pm.environment.copy(mutableEnv = pm.environment.mutableEnv.toMutableMap())
163157
)
164158
// * NOTE 15/10/23 gopala.akshintala: http status code can be non-success
165-
haltExecution = shouldHaltExecution(currentStepReport, kick, stepReports)
159+
haltExecution = shouldHaltExecution(currentStepReport, kick, pm)
166160
stepReports + currentStepReport
167161
}
168162
}

src/main/kotlin/com/salesforce/revoman/input/JSUtils.kt

Lines changed: 0 additions & 56 deletions
This file was deleted.

src/main/kotlin/com/salesforce/revoman/input/json/JsonPojoUtils.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,8 @@ private fun <PojoT : Any> initMoshi(
147147
customAdaptersWithType: Map<Type, List<Either<JsonAdapter<Any>, Factory>>> = emptyMap(),
148148
skipTypes: Set<Class<out Any>> = emptySet(),
149149
pojoType: Type
150-
): JsonAdapter<PojoT> {
151-
val moshiBuilder = buildMoshi(customAdapters, customAdaptersWithType, skipTypes)
152-
return moshiBuilder.build().adapter(pojoType)
153-
}
150+
): JsonAdapter<PojoT> =
151+
buildMoshi(customAdapters, customAdaptersWithType, skipTypes).build().adapter(pojoType)
154152

155153
@PojoConfig
156154
@Value.Immutable

src/main/kotlin/com/salesforce/revoman/internal/exe/ExeUtils.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import arrow.core.Either.Left
1414
import arrow.core.Either.Right
1515
import com.salesforce.revoman.input.config.Kick
1616
import com.salesforce.revoman.input.config.StepPick.ExeStepPick
17+
import com.salesforce.revoman.internal.postman.PostmanSDK
1718
import com.salesforce.revoman.internal.postman.template.Item
1819
import com.salesforce.revoman.output.ExeType
19-
import com.salesforce.revoman.output.Rundown
2020
import com.salesforce.revoman.output.report.Folder
2121
import com.salesforce.revoman.output.report.Step
2222
import com.salesforce.revoman.output.report.StepReport
@@ -90,7 +90,7 @@ internal fun <T> runChecked(
9090
internal fun shouldHaltExecution(
9191
currentStepReport: StepReport,
9292
kick: Kick,
93-
stepReports: List<StepReport>
93+
pm: PostmanSDK
9494
): Boolean =
9595
when {
9696
currentStepReport.isSuccessful -> false
@@ -108,7 +108,7 @@ internal fun shouldHaltExecution(
108108
currentStepReport.exeTypeForFailure == exeType &&
109109
postTxnPick.pick(
110110
currentStepReport,
111-
Rundown(stepReports + currentStepReport, kick.haltOnFailureOfTypeExcept()),
111+
pm.rundown.copy(stepReports = pm.rundown.stepReports + currentStepReport)
112112
)
113113
}
114114
?.any { it }

0 commit comments

Comments
 (0)