How to use getTestContext method of com.consol.citrus.dsl.design.DefaultTestDesigner class

Best Citrus code snippet using com.consol.citrus.dsl.design.DefaultTestDesigner.getTestContext

Source:CitrusExtension.java Github

copy

Full Screen

...61 extensionContext.getExecutionException()62 .ifPresent(e -> testCase.setTestResult(TestResult.failed(testCase.getName(), testCase.getTestClass().getName(), e)));63 if (isDesignerMethod(extensionContext.getRequiredTestMethod()) ||64 isDesignerClass(extensionContext.getRequiredTestClass())) {65 TestContext context = getTestContext(extensionContext);66 try {67 getCitrus(extensionContext).run(testCase, context);68 } catch (TestCaseFailedException e) {69 throw e;70 } catch (Exception | AssertionError e) {71 testCase.setTestResult(TestResult.failed(testCase.getName(), testCase.getTestClass().getName(), e));72 testCase.finish(context);73 throw new TestCaseFailedException(e);74 }75 } else if (isRunnerMethod(extensionContext.getRequiredTestMethod()) ||76 isRunnerClass(extensionContext.getRequiredTestClass())) {77 getTestRunner(extensionContext).stop();78 }79 extensionContext.getRoot().getStore(NAMESPACE).remove(getBaseKey(extensionContext) + TestRunner.class.getSimpleName());80 extensionContext.getRoot().getStore(NAMESPACE).remove(getBaseKey(extensionContext) + TestDesigner.class.getSimpleName());81 }82 super.afterTestExecution(extensionContext);83 }84 @Override85 public void beforeTestExecution(ExtensionContext extensionContext) throws Exception {86 if (isXmlTestMethod(extensionContext.getRequiredTestMethod())) {87 super.beforeTestExecution(extensionContext);88 }89 CitrusDslAnnotations.injectTestDesigner(extensionContext.getRequiredTestInstance(), getTestDesigner(extensionContext));90 CitrusDslAnnotations.injectTestRunner(extensionContext.getRequiredTestInstance(), getTestRunner(extensionContext));91 }92 @Override93 public void beforeEach(ExtensionContext extensionContext) throws Exception {94 if (isXmlTestMethod(extensionContext.getRequiredTestMethod())) {95 super.beforeEach(extensionContext);96 } else {97 getTestContext(extensionContext);98 TestCase testCase = getTestCase(extensionContext);99 if (isRunnerMethod(extensionContext.getRequiredTestMethod()) || isRunnerClass(extensionContext.getRequiredTestClass())) {100 TestRunner testRunner = getTestRunner(extensionContext);101 try {102 testRunner.start();103 } catch (Exception | AssertionError e) {104 getTestCase(extensionContext).setTestResult(TestResult.failed(testCase.getName(), testCase.getTestClass().getName(), e));105 throw new TestCaseFailedException(e);106 }107 }108 }109 }110 @Override111 public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {112 if (TestDesigner.class.isAssignableFrom(parameterContext.getParameter().getType())) {113 return getTestDesigner(extensionContext);114 } else if (TestRunner.class.isAssignableFrom(parameterContext.getParameter().getType())) {115 return getTestRunner(extensionContext);116 }117 return super.resolveParameter(parameterContext, extensionContext);118 }119 /**120 * Get the {@link TestDesigner} associated with the supplied {@code ExtensionContext} and its required test class name.121 * @return the {@code TestDesigner} (never {@code null})122 */123 protected static TestDesigner getTestDesigner(ExtensionContext extensionContext) {124 Assert.notNull(extensionContext, "ExtensionContext must not be null");125 return extensionContext.getRoot().getStore(NAMESPACE).getOrComputeIfAbsent(getBaseKey(extensionContext) + TestDesigner.class.getSimpleName(), key -> {126 String testName = extensionContext.getRequiredTestClass().getSimpleName() + "." + extensionContext.getRequiredTestMethod().getName();127 if (extensionContext.getRequiredTestMethod().getAnnotation(CitrusTest.class) != null) {128 CitrusTest citrusTestAnnotation = extensionContext.getRequiredTestMethod().getAnnotation(CitrusTest.class);129 if (StringUtils.hasText(citrusTestAnnotation.name())) {130 testName = citrusTestAnnotation.name();131 }132 }133 TestDesigner testDesigner = new DefaultTestDesigner(getCitrus(extensionContext).getApplicationContext(), getTestContext(extensionContext));134 testDesigner.testClass(extensionContext.getRequiredTestClass());135 testDesigner.name(testName);136 testDesigner.packageName(extensionContext.getRequiredTestClass().getPackage().getName());137 return testDesigner;138 }, TestDesigner.class);139 }140 /**141 * Get the {@link TestRunner} associated with the supplied {@code ExtensionContext} and its required test class name.142 * @return the {@code TestRunner} (never {@code null})143 */144 protected static TestRunner getTestRunner(ExtensionContext extensionContext) {145 Assert.notNull(extensionContext, "ExtensionContext must not be null");146 return extensionContext.getRoot().getStore(NAMESPACE).getOrComputeIfAbsent(getBaseKey(extensionContext) + TestRunner.class.getSimpleName(), key -> {147 String testName = extensionContext.getRequiredTestClass().getSimpleName() + "." + extensionContext.getRequiredTestMethod().getName();148 if (extensionContext.getRequiredTestMethod().getAnnotation(CitrusTest.class) != null) {149 CitrusTest citrusTestAnnotation = extensionContext.getRequiredTestMethod().getAnnotation(CitrusTest.class);150 if (StringUtils.hasText(citrusTestAnnotation.name())) {151 testName = citrusTestAnnotation.name();152 }153 }154 TestRunner testRunner = new DefaultTestRunner(getCitrus(extensionContext).getApplicationContext(), getTestContext(extensionContext));155 testRunner.testClass(extensionContext.getRequiredTestClass());156 testRunner.name(testName);157 testRunner.packageName(extensionContext.getRequiredTestClass().getPackage().getName());158 return testRunner;159 }, TestRunner.class);160 }161 /**162 * Get the {@link TestCase} associated with the supplied {@code ExtensionContext} and its required test class name.163 * @return the {@code TestCase} (never {@code null})164 */165 protected static TestCase getTestCase(ExtensionContext extensionContext) {166 Assert.notNull(extensionContext, "ExtensionContext must not be null");167 return extensionContext.getRoot().getStore(NAMESPACE).getOrComputeIfAbsent(getBaseKey(extensionContext) + TestCase.class.getSimpleName(), key -> {168 if (isDesignerMethod(extensionContext.getRequiredTestMethod())) {...

Full Screen

Full Screen

Source:ExecutableTestDesigner.java Github

copy

Full Screen

...31 super(applicationContext, Citrus.newInstance(applicationContext).createTestContext());32 }33 @Override34 public void execute() {35 execute(getTestContext());36 }37 /**38 * Builds and executes test case with given test context.39 * @param context40 */41 public void execute(TestContext context) {42 getTestCase().execute(context);43 }44 /**45 * Creates new test context from Spring bean application context.46 * If no Spring bean application context is set an exception is raised. Users may want to create proper test context47 * instance themselves in case Spring application context is not present.48 * @return49 */50 @Override51 public TestContext getTestContext() {52 if (super.getTestContext() == null) {53 TestContext context = getApplicationContext().getBean(TestContext.class);54 context.setApplicationContext(getApplicationContext());55 return context;56 } else {57 return super.getTestContext();58 }59 }60}...

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1import com.consol.citrus.dsl.design.TestDesigner;2import com.consol.citrus.dsl.design.TestDesignerImpl;3import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;4import com.consol.citrus.dsl.testng.TestNGCitrusTestDesignerBuilder;5import com.consol.citrus.dsl.testng.TestNGCitrusTestDesignerRunner;6import com.consol.citrus.dsl.testng.TestNGCitrusTestRunner;7import com.consol.citrus.dsl.testng.TestNGCitrusTestRunnerBuilder;8import com.consol.citrus.dsl.testng.TestNGCitrusTestRunnerRunner;9import com.consol.citrus.dsl.testng.TestNGTestDesigner;10import com.consol.citrus.dsl.testng.TestNGTestDesignerBuilder;11import com.consol.citrus.dsl.testng.TestNGTestDesignerRunner;12import com.consol.citrus.dsl.testng.TestNGTestRunner;13import com.consol.citrus.dsl.testng.TestNGTestRunnerBuilder;14import com.consol.citrus.dsl.testng.TestNGTestRunnerRunner;15import com.consol.citrus.dsl.testng.TestNGTestRunnerRunnerBuilder;16import com.consol.citrus.testng.CitrusParameters;17import com.consol.citrus.testng.CitrusXmlTestNGSupport;18import com.consol.citrus.testng.CitrusXmlTestNGSupportRunner;19import com.consol.citrus.testng.CitrusXmlTestNGSupportRunnerBuilder;20import com.consol.citrus.testng.CitrusXmlTestNGSupportRunnerRunner;21import com.consol.citrus.testng.CitrusXmlTestNGSupportRunnerRunnerBuilder;22import com.consol.citrus.testng.TestNGCitrusSupport;23import com.consol.citrus.testng.TestNGCitrusSupportRunner;24import com.consol.citrus.testng.TestNGCitrusSupportRunnerBuilder;25import com.consol.citrus.testng.TestNGCitrusSupportRunnerRunner;26import com.consol.citrus.testng.TestNGCitrusSupportRunnerRunnerBuilder;27import com.consol.citrus.testng.TestNGSupport;28import com.consol.citrus.testng.TestNGSupportRunner;29import com.consol.citrus.testng.TestNGSupportRunnerBuilder;30import com.consol.citrus.testng.TestNGSupportRunnerRunner;31import com.consol.citrus.testng.TestNGSupportRunnerRunnerBuilder;32import com.consol.citrus.testng.TestNGSupportRunnerRunnerRunner;33import com.consol.citrus

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;3import com.consol.citrus.testng.CitrusParameters;4import org.testng.annotations.Test;5public class GetTestContextIT extends TestNGCitrusTestDesigner {6 @CitrusParameters("name")7 public void getTestContext() {8 echo("Hello ${name}");9 echo("Hello again ${name}");10 }11}12package com.consol.citrus.dsl.testng;13import com.consol.citrus.dsl.design.DefaultTestDesigner;14import com.consol.citrus.testng.CitrusParameters;15import org.testng.annotations.Test;16public class GetTestContextIT extends TestNGCitrusTestDesigner {17 @CitrusParameters("name")18 public void getTestContext() {19 echo("Hello ${name}");20 echo("Hello again ${name}");21 }22}23package com.consol.citrus.dsl.testng;24import com.consol.citrus.dsl.design.DefaultTestDesigner;25import com.consol.citrus.testng.CitrusParameters;26import org.testng.annotations.Test;27public class GetTestContextIT extends DefaultTestDesigner {28 @CitrusParameters("name")29 public void getTestContext() {30 echo("Hello ${name}");31 echo("Hello again ${name}");32 }33}34package com.consol.citrus.dsl.testng;35import com.consol.citrus.dsl.design.DefaultTestDesigner;36import com.consol.citrus.testng.CitrusParameters;37import org.testng.annotations.Test;38public class GetTestContextIT extends DefaultTestDesigner {39 @CitrusParameters("name")40 public void getTestContext() {41 echo("Hello ${name}");42 echo("Hello again ${name}");43 }44}

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;3import org.testng.annotations.Test;4public class GetTestContext extends TestNGCitrusTestDesigner {5 public void getTestContext() {6 echo("test context: " + getTestContext());7 }8}9package com.consol.citrus.dsl.testng;10import com.consol.citrus.dsl.testng.TestNGCitrusTest;11import org.testng.annotations.Test;12public class GetTestContext extends TestNGCitrusTest {13 public void getTestContext() {14 echo("test context: " + getTestContext());15 }16}17package com.consol.citrus.dsl.testng;18import org.testng.annotations.Test;19public class GetTestContext extends TestNGCitrusTestRunner {20 public void getTestContext() {21 echo("test context: " + getTestContext());22 }23}24package com.consol.citrus.dsl.testng;25import org.testng.annotations.Test;26public class GetTestContext extends TestNGCitrusTestDesigner {27 public void getTestContext() {28 echo("test context: " + getTestContext());29 }30}31package com.consol.citrus.dsl.testng;32import org.testng.annotations.Test;33public class GetTestContext extends TestNGCitrusTestRunner {34 public void getTestContext() {35 echo("test context: " + getTestContext());36 }37}38package com.consol.citrus.dsl.testng;39import org.testng.annotations.Test;

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import com.consol.citrus.dsl.endpoint.CitrusEndpoints;3import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;4import com.consol.citrus.http.client.HttpClient;5import org.springframework.http.HttpStatus;6import org.testng.annotations.Test;7public class getTestContext extends TestNGCitrusTestDesigner {8public void getTestContext() {9HttpClient client = CitrusEndpoints.http()10.client()11.build();12client.createRequest(builder -> builder.post("/echo"));13client.send(builder -> builder.payload("Hello Citrus!"));14client.createResponse(builder -> builder.status(HttpStatus.OK));15client.receive(builder -> builder.payload("Hello Citrus!"));16}17}18package com.consol.citrus.dsl.testng;19import com.consol.citrus.dsl.endpoint.CitrusEndpoints;20import com.consol.citrus.http.client.HttpClient;21import org.springframework.http.HttpStatus;22import org.testng.annotations.Test;23public class getTestContext extends TestNGCitrusTestDesigner {24public void getTestContext() {25HttpClient client = CitrusEndpoints.http()26.client()27.build();28client.createRequest(builder -> builder.post("/echo"));29client.send(builder -> builder.payload("Hello Citrus!"));30client.createResponse(builder -> builder.status(HttpStatus.OK));31client.receive(builder -> builder.payload("Hello Citrus!"));32}33}34package com.consol.citrus.dsl.testng;35import com.consol.citrus.dsl.endpoint.CitrusEndpoints;36import com.consol.citrus.http.client.HttpClient;37import org.springframework.http.HttpStatus;38import org.testng.annotations.Test;39public class getTestContext extends TestNGCitrusTestDesigner {40public void getTestContext() {41HttpClient client = CitrusEndpoints.http()42.client()43.build();44client.createRequest(builder -> builder.post("/echo"));45client.send(builder -> builder.payload("Hello Citrus!"));46client.createResponse(builder -> builder.status(HttpStatus.OK));47client.receive(builder -> builder.payload("Hello Citrus!"));48}49}

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import com.consol.citrus.dsl.junit.JUnit4CitrusTestDesigner;3import org.junit.Test;4public class GetTestContextTest extends JUnit4CitrusTestDesigner {5 public void getTestContext() {6 getTestContext().setVariable("var", "value");7 echo("${var}");8 }9}10package com.consol.citrus.dsl.design;11import com.consol.citrus.dsl.junit.JUnit4CitrusTestDesigner;12import org.junit.Test;13public class GetTestCaseTest extends JUnit4CitrusTestDesigner {14 public void getTestCase() {15 getTestCase().setVariable("var", "value");16 echo("${var}");17 }18}19package com.consol.citrus.dsl.design;20import com.consol.citrus.dsl.junit.JUnit4CitrusTestDesigner;21import org.junit.Test;22public class GetTestRunnerTest extends JUnit4CitrusTestDesigner {23 public void getTestRunner() {24 getTestRunner().setVariable("var", "value");25 echo("${var}");26 }27}28package com.consol.citrus.dsl.design;29import com.consol.citrus.dsl.junit.JUnit4CitrusTestDesigner;30import org.junit.Test;31public class GetTestRunnerTest extends JUnit4CitrusTestDesigner {32 public void getTestRunner() {33 getTestRunner().setVariable("var", "value");34 echo("${var}");35 }36}37package com.consol.citrus.dsl.design;38import com.consol.citrus.dsl.junit.JUnit4CitrusTestDesigner;39import org.junit.Test;40public class GetTestRunnerTest extends JUnit4CitrusTestDesigner {41 public void getTestRunner() {42 getTestRunner().setVariable

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import com.consol.citrus.dsl.design.TestDesigner;3import com.consol.citrus.dsl.design.TestDesignerBeforeTestSupport;4import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;5import com.consol.citrus.testng.CitrusParameters;6import org.springframework.test.context.ContextConfiguration;7import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;8import org.testng.annotations.Test;9import org.testng.annotations.DataProvider;10import org.testng.ITestContext;11public class getTestContext_Test extends TestNGCitrusTestDesigner {12@CitrusParameters({"param1", "param2"})13@Test(dataProvider = "testDataProvider")14public void getTestContext1(ITestContext context, String param1, String param2) {15}16public Object[][] testDataProvider() {17return new Object[][] {18new Object[] { "value1", "value2" },19new Object[] { "value3", "value4" },20new Object[] { "value5", "value6" } };21}22}23 at com.consol.citrus.dsl.design.getTestContext_Test.getTestContext1(getTestContext_Test.java:15)24 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)25 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)26 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)27 at java.lang.reflect.Method.invoke(Method.java:498)28 at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:132)29 at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:64)30 at org.testng.internal.Invoker.invokeMethod(Invoker.java:580)31 at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)32 at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)33 at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)34 at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)35 at org.testng.TestRunner.privateRun(TestRunner.java:648)36 at org.testng.TestRunner.run(TestRunner.java:505)37 at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)38 at org.testng.SuiteRunner.runSequentially(S

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.dsl.design;2import com.consol.citrus.dsl.design.TestDesigner;3import com.consol.citrus.dsl.design.TestDesignerBeforeTestSupport;4import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;5import com.consol.citrus.message.MessageType;6import org.springframework.context.ApplicationContext;7import org.testng.annotations.Test;8public class getTestContext_ITest extends TestNGCitrusTestDesigner {9public void getTestContext_ITest() {10TestDesigner designer = new DefaultTestDesigner(applicationContext, context) {11public void configure() {12getTestContext();13}14};15designer = new DefaultTestDesigner(applicationContext, context) {16public void configure() {17getTestContext();18}19};20designer = new TestDesignerBeforeTestSupport(applicationContext, context) {21public void configure() {22getTestContext();23}24};25designer = new TestDesignerBeforeTestSupport(applicationContext, context) {26public void configure() {27getTestContext();28}29};30designer = new TestDesignerBeforeTestSupport(applicationContext, context) {31public void configure() {32getTestContext();33}34};35designer = new TestDesignerBeforeTestSupport(applicationContext, context) {36public void configure() {37getTestContext();38}39};40designer = new TestDesignerBeforeTestSupport(applicationContext, context) {41public void configure() {42getTestContext();43}44};45}46}47package com.consol.citrus.dsl.testng;48import com.consol.citrus.dsl.design.TestDesigner;49import com.consol.citrus.dsl.design.TestDesignerBeforeTestSupport;50import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;51import com.consol.citrus.message.MessageType;52import org.springframework.context.ApplicationContext;53import org.testng.annotations.Test;54public class getTestContext_ITest extends TestNGCitrusTestDesigner {55public void getTestContext_ITest() {56TestDesigner designer = new DefaultTestDesigner(applicationContext, context) {57public void configure() {58getTestContext();59}60};

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1public class 3 extends com.consol.citrus.dsl.design.DefaultTestDesigner {2 public void configure() {3 getTestContext();4 }5}6public class 4 extends com.consol.citrus.dsl.design.TestDesigner {7 public void configure() {8 getTestContext();9 }10}11public class 5 extends com.consol.citrus.dsl.design.TestDesignerSupport {12 public void configure() {13 getTestContext();14 }15}16public class 6 extends com.consol.citrus.dsl.design.TestDesignerSupport {17 public void configure() {18 getTestContext();19 }20}21public class 7 extends com.consol.citrus.dsl.design.TestDesignerSupport {22 public void configure() {23 getTestContext();24 }25}26public class 8 extends com.consol.citrus.dsl.design.TestDesignerSupport {27 public void configure() {28 getTestContext();29 }30}31public class 9 extends com.consol.citrus.dsl.design.TestDesignerSupport {32 public void configure() {33 getTestContext();34 }35}36public class 10 extends com.consol.citrus.dsl.design.TestDesignerSupport {37 public void configure() {38 getTestContext();39 }40}

Full Screen

Full Screen

getTestContext

Using AI Code Generation

copy

Full Screen

1import com.consol.citrus.dsl.design.TestDesigner;2import com.consol.citrus.dsl.design.TestDesignerBeforeTestSupport;3import org.springframework.context.ApplicationContext;4public class getTestContext_IT extends TestDesignerBeforeTestSupport {5 protected void configure(TestDesigner testDesigner) {6 ApplicationContext applicationContext = testDesigner.getTestContext();7 }8}9import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;10import org.springframework.context.ApplicationContext;11public class getTestContext_IT extends TestNGCitrusTestDesigner {12 protected void configure() {13 ApplicationContext applicationContext = getTestContext();14 }15}16import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;17import org.springframework.context.ApplicationContext;18public class getTestContext_IT extends TestNGCitrusTestDesigner {19 protected void configure() {20 ApplicationContext applicationContext = getTestContext();21 }22}23import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;24import org.springframework.context.ApplicationContext;25public class getTestContext_IT extends TestNGCitrusTestDesigner {26 protected void configure() {27 ApplicationContext applicationContext = getTestContext();28 }29}30import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;31import org.springframework.context.ApplicationContext;32public class getTestContext_IT extends TestNGCitrusTestDesigner {33 protected void configure() {34 ApplicationContext applicationContext = getTestContext();35 }36}37import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;38import org.springframework.context.ApplicationContext;

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful