How to use APIMethodBuilder class of com.qaprosoft.carina.core.foundation.api package

Best Carina code snippet using com.qaprosoft.carina.core.foundation.api.APIMethodBuilder

Source:AbstractTest.java Github

copy

Full Screen

...50import com.amazonaws.services.s3.model.S3Object;51import com.amazonaws.services.s3.model.S3ObjectSummary;52import com.jayway.restassured.RestAssured;53import com.qaprosoft.amazon.AmazonS3Manager;54import com.qaprosoft.carina.core.foundation.api.APIMethodBuilder;55import com.qaprosoft.carina.core.foundation.commons.SpecialKeywords;56import com.qaprosoft.carina.core.foundation.dataprovider.core.DataProviderFactory;57import com.qaprosoft.carina.core.foundation.jira.Jira;58import com.qaprosoft.carina.core.foundation.listeners.AbstractTestListener;59import com.qaprosoft.carina.core.foundation.report.Artifacts;60import com.qaprosoft.carina.core.foundation.report.ReportContext;61import com.qaprosoft.carina.core.foundation.report.TestResultItem;62import com.qaprosoft.carina.core.foundation.report.TestResultType;63import com.qaprosoft.carina.core.foundation.report.email.EmailManager;64import com.qaprosoft.carina.core.foundation.report.email.EmailReportGenerator;65import com.qaprosoft.carina.core.foundation.report.email.EmailReportItemCollector;66import com.qaprosoft.carina.core.foundation.report.testrail.TestRail;67import com.qaprosoft.carina.core.foundation.skip.ExpectedSkipManager;68import com.qaprosoft.carina.core.foundation.utils.Configuration;69import com.qaprosoft.carina.core.foundation.utils.Configuration.DriverMode;70import com.qaprosoft.carina.core.foundation.utils.Configuration.Parameter;71import com.qaprosoft.carina.core.foundation.utils.DateUtils;72import com.qaprosoft.carina.core.foundation.utils.JsonUtils;73import com.qaprosoft.carina.core.foundation.utils.Messager;74import com.qaprosoft.carina.core.foundation.utils.R;75import com.qaprosoft.carina.core.foundation.utils.common.CommonUtils;76import com.qaprosoft.carina.core.foundation.utils.metadata.MetadataCollector;77import com.qaprosoft.carina.core.foundation.utils.metadata.model.ElementsInfo;78import com.qaprosoft.carina.core.foundation.utils.naming.TestNamingUtil;79import com.qaprosoft.carina.core.foundation.utils.resources.I18N;80import com.qaprosoft.carina.core.foundation.utils.resources.L10N;81import com.qaprosoft.carina.core.foundation.utils.resources.L10Nparser;82import com.qaprosoft.carina.core.foundation.webdriver.DriverPool;83import com.qaprosoft.carina.core.foundation.webdriver.core.capability.CapabilitiesLoader;84import com.qaprosoft.carina.core.foundation.webdriver.device.Device;85import com.qaprosoft.carina.core.foundation.webdriver.device.DevicePool;86import com.qaprosoft.hockeyapp.HockeyAppManager;87/*88 * AbstractTest - base test for UI and API tests.89 * 90 * @author Alex Khursevich91 */92@Listeners({ AbstractTestListener.class })93public abstract class AbstractTest // extends DriverHelper94{95 protected static final Logger LOGGER = Logger.getLogger(AbstractTest.class);96 protected APIMethodBuilder apiMethodBuilder;97 protected static final long EXPLICIT_TIMEOUT = Configuration.getLong(Parameter.EXPLICIT_TIMEOUT);98 protected static final String SUITE_TITLE = "%s%s%s - %s (%s%s)";99 protected static final String XML_SUITE_NAME = " (%s)";100 protected static ThreadLocal<String> suiteNameAppender = new ThreadLocal<String>();101 // 3rd party integrations102 protected String browserVersion = "";103 protected long startDate;104 @BeforeSuite(alwaysRun = true)105 public void executeBeforeTestSuite(ITestContext context) {106 // Add shutdown hook107 Runtime.getRuntime().addShutdownHook(new ShutdownHook());108 // Set log4j properties109 PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));110 // Set SoapUI log4j properties111 System.setProperty("soapui.log4j.config", "./src/main/resources/soapui-log4j.xml");112 try {113 Logger root = Logger.getRootLogger();114 Enumeration<?> allLoggers = root.getLoggerRepository().getCurrentCategories();115 while (allLoggers.hasMoreElements()) {116 Category tmpLogger = (Category) allLoggers.nextElement();117 if (tmpLogger.getName().equals("com.qaprosoft.carina.core")) {118 tmpLogger.setLevel(Level.toLevel(Configuration.get(Parameter.CORE_LOG_LEVEL)));119 }120 }121 } catch (NoSuchMethodError e) {122 LOGGER.error("Unable to redefine logger level due to the conflicts between log4j and slf4j!");123 }124 startDate = new Date().getTime();125 LOGGER.info(Configuration.asString());126 // Configuration.validateConfiguration();127 LOGGER.debug("Default thread_count=" + context.getCurrentXmlTest().getSuite().getThreadCount());128 context.getCurrentXmlTest().getSuite().setThreadCount(Configuration.getInt(Parameter.THREAD_COUNT));129 LOGGER.debug("Updated thread_count=" + context.getCurrentXmlTest().getSuite().getThreadCount());130 // update DataProviderThreadCount if any property is provided otherwise sync with value from suite xml file131 int count = Configuration.getInt(Parameter.DATA_PROVIDER_THREAD_COUNT);132 if (count > 0) {133 LOGGER.debug("Updated 'data_provider_thread_count' from "134 + context.getCurrentXmlTest().getSuite().getDataProviderThreadCount() + " to " + count);135 context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(count);136 } else {137 LOGGER.debug("Synching data_provider_thread_count with values from suite xml file...");138 R.CONFIG.put(Parameter.DATA_PROVIDER_THREAD_COUNT.getKey(),139 String.valueOf(context.getCurrentXmlTest().getSuite().getDataProviderThreadCount()));140 LOGGER.debug("Updated 'data_provider_thread_count': " + Configuration.getInt(Parameter.DATA_PROVIDER_THREAD_COUNT));141 }142 LOGGER.debug("Default data_provider_thread_count="143 + context.getCurrentXmlTest().getSuite().getDataProviderThreadCount());144 LOGGER.debug("Updated data_provider_thread_count="145 + context.getCurrentXmlTest().getSuite().getDataProviderThreadCount());146 if (!Configuration.isNull(Parameter.URL)) {147 if (!Configuration.get(Parameter.URL).isEmpty()) {148 RestAssured.baseURI = Configuration.get(Parameter.URL);149 }150 }151 try {152 L10N.init();153 } catch (Exception e) {154 LOGGER.error("L10N bundle is not initialized successfully!", e);155 }156 try {157 I18N.init();158 } catch (Exception e) {159 LOGGER.error("I18N bundle is not initialized successfully!", e);160 }161 try {162 L10Nparser.init();163 } catch (Exception e) {164 LOGGER.error("L10Nparser bundle is not initialized successfully!", e);165 }166 // TODO: move out from AbstractTest->executeBeforeTestSuite167 String customCapabilities = Configuration.get(Parameter.CUSTOM_CAPABILITIES);168 if (!customCapabilities.isEmpty()) {169 // redefine core CONFIG properties using custom capabilities file170 new CapabilitiesLoader().loadCapabilities(customCapabilities);171 }172 String extraCapabilities = Configuration.get(Parameter.EXTRA_CAPABILITIES);173 if (!extraCapabilities.isEmpty()) {174 // redefine core CONFIG properties using extra capabilities file175 new CapabilitiesLoader().loadCapabilities(extraCapabilities);176 }177 try {178 TestRail.updateBeforeSuite(context, this.getClass().getName(), getTitle(context));179 } catch (Exception e) {180 LOGGER.error("TestRail is not initialized successfully!", e);181 }182 updateAppPath();183 }184 @BeforeClass(alwaysRun = true)185 public void executeBeforeTestClass(ITestContext context) throws Throwable {186 // do nothing for now187 }188 @AfterClass(alwaysRun = true)189 public void executeAfterTestClass(ITestContext context) throws Throwable {190 if (Configuration.getDriverMode() == DriverMode.CLASS_MODE) {191 LOGGER.debug("Deinitialize driver(s) in UITest->AfterClass.");192 quitDrivers();193 }194 }195 @BeforeMethod(alwaysRun = true)196 public void executeBeforeTestMethod(XmlTest xmlTest, Method testMethod, ITestContext context) throws Throwable {197 // handle expected skip198 if (ExpectedSkipManager.getInstance().isSkip(testMethod, context)) {199 skipExecution("Based on rule listed above");200 }201 // do nothing for now202 apiMethodBuilder = new APIMethodBuilder();203 }204 @AfterMethod(alwaysRun = true)205 public void executeAfterTestMethod(ITestResult result) {206 try {207 if (apiMethodBuilder != null) {208 apiMethodBuilder.close();209 }210 DriverMode driverMode = Configuration.getDriverMode();211 if (driverMode == DriverMode.METHOD_MODE) {212 LOGGER.debug("Deinitialize driver(s) in @AfterMethod.");213 quitDrivers();214 }215 // TODO: improve later removing duplicates with AbstractTestListener216 // handle Zafira already passed exception for re-run and do nothing. maybe return should be enough...

Full Screen

Full Screen

Source:APIMethodBuilder.java Github

copy

Full Screen

...4import java.util.UUID;5import com.jayway.restassured.filter.log.RequestLoggingFilter;6import com.jayway.restassured.filter.log.ResponseLoggingFilter;7import com.qaprosoft.carina.core.foundation.report.ReportContext;8public class APIMethodBuilder9{10 private File temp;11 private PrintStream ps;12 13 public APIMethodBuilder()14 {15 temp = new File(String.format("%s/%s.tmp", ReportContext.getTempDir().getAbsolutePath(), UUID.randomUUID()));16 try17 {18 ps = new PrintStream(temp);19 }20 catch(Exception e)21 {22 throw new RuntimeException(e.getMessage());23 }24 }25 26 public <T extends AbstractApiMethod> T build(T method)27 {...

Full Screen

Full Screen

APIMethodBuilder

Using AI Code Generation

copy

Full Screen

1import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;2import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;3import com.qaprosoft.carina.core.foundation.api.builder.APIMethodBuilder;4import com.qaprosoft.carina.core.foundation.api.builder.APIMethodBuilder;5import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;6public class Test extends AbstractApiMethodV2 {7 public Test() {8 super(new APIMethodBuilder("/api/1.0/users/1", "GET")9 .addParameter("parameter1", "value1")10 .addParameter("parameter2", "value2")11 .addHeader("header1", "value1")12 .addHeader("header2", "value2")13 .addCookie("cookie1", "value1")14 .addCookie("cookie2", "value2")15 .addProperty("property1", "value1")16 .addProperty("property2", "value2")17 .addProperty("property3", "value3")18 .addProperty("property4", "value4")19 .addProperty("property5", "value5")20 .addProperty("property6", "value6")21 .addProperty("property7", "value7")22 .addProperty("property8", "value8")23 .addProperty("property9", "value9")24 .addProperty("property10", "value10")25 .addProperty("property11", "value11")26 .addProperty("property12", "value12")27 .addProperty("property13", "value13")28 .addProperty("property14", "value14")29 .addProperty("property15", "value15")30 .addProperty("property16", "value16")31 .addProperty("property17", "value17")32 .addProperty("property18", "value18")33 .addProperty("property19", "value19")34 .addProperty("property20", "value20")35 .addProperty("property21", "value21")36 .addProperty("property22", "value22")37 .addProperty("property23", "value23")38 .addProperty("property24", "value24")39 .addProperty("property25", "value25")40 .addProperty("property26", "value26")

Full Screen

Full Screen

APIMethodBuilder

Using AI Code Generation

copy

Full Screen

1package com.qaprosoft.carina.demo.api;2import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;3import com.qaprosoft.carina.core.foundation.api.AbstractApiTest;4import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;5import com.qaprosoft.carina.core.foundation.utils.Configuration;6import com.qaprosoft.carina.core.foundation.utils.R;7import com.qaprosoft.carina.core.foundation.utils.ownership.MethodOwner;8import com.qaprosoft.carina.demo.api.post.PostMethod;9import com.qaprosoft.carina.demo.api.put.PutMethod;10import com.qaprosoft.carina.demo.api.get.GetMethod;11import com.qaprosoft.carina.demo.api.delete.DeleteMethod;12import com.qaprosoft.carina.demo.api.get.GetMethodWithParams;13import com.qaprosoft.carina.demo.api.get.GetMethodWithParams1;14import com.qaprosoft.carina.demo.api.get.GetMethodWithParams2;15import com.qaprosoft.carina.demo.api.get.GetMethodWithParams3;16import com.qaprosoft.carina.demo.api.get.GetMethodWithParams4;17import com.qaprosoft.carina.demo.api.get.GetMethodWithParams5;18import com.qaprosoft.carina.demo.api.get.GetMethodWithParams6;19import com.qaprosoft.carina.demo.api.get.GetMethodWithParams7;20import com.qaprosoft.carina.demo.api.get.GetMethodWithParams8;21import com.qaprosoft.carina.demo.api.get.GetMethodWithParams9;22import com.qaprosoft.carina.demo.api.get.GetMethodWithParams10;23import com.qaprosoft.carina.demo.api.get.GetMethodWithParams11;24import com.qaprosoft.carina.demo.api.get.GetMethodWithParams12;25import com.qaprosoft.carina.demo.api.get.GetMethodWithParams13;26import com.qaprosoft.carina.demo.api.get.GetMethodWithParams14;27import com.qaprosoft.carina.demo.api.get.GetMethodWithParams15;28import com.qaprosoft.carina.demo.api.get.GetMethodWithParams16;29import com.qaprosoft.carina.demo.api.get.GetMethodWithParams17;30import com.qaprosoft.carina.demo.api.get.GetMethodWithParams18;31import com.qaprosoft.carina.demo.api.get.GetMethodWithParams19;32import com.qaprosoft.carina.demo.api.get.GetMethodWithParams20;33import com.qaprosoft.carina.demo.api.get.GetMethodWithParams21;34import

Full Screen

Full Screen

APIMethodBuilder

Using AI Code Generation

copy

Full Screen

1package com.qaprosoft.carina.demo.api;2import org.testng.Assert;3import org.testng.annotations.Test;4import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;5import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2.RSResponseType;6import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;7import com.qaprosoft.carina.core.foundation.utils.Configuration;8import com.qaprosoft.carina.core.foundation.utils.ownership.MethodOwner;9public class APIMethodBuilderTest extends AbstractAPITest {10 @MethodOwner(owner = "qpsdemo")11 public void testAPIMethodBuilder() {12 AbstractApiMethodV2 apiMethod = new APIMethodBuilder()13 .methodName("testAPIMethodBuilder")14 .responseType(RSResponseType.JSON)15 .responseStatus(HttpResponseStatusType.OK_200)16 .url(Configuration.getEnvArg("api_url"))17 .build();18 apiMethod.callAPI();19 apiMethod.validateResponseAgainstJSONSchema("api_test_schema.json");20 apiMethod.validateResponse();21 Assert.assertEquals(apiMethod.getResponseBody(), "{\"result\":\"success\"}", "Response body doesn't match!");22 }23}24package com.qaprosoft.carina.demo.api;25import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;26import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;27public class APIMethodBuilder extends AbstractApiMethodV2 {28 public APIMethodBuilder() {29 super(null, null);30 }31}

Full Screen

Full Screen

APIMethodBuilder

Using AI Code Generation

copy

Full Screen

1import org.testng.annotations.Test;2import org.testng.Assert;3import org.testng.AssertJUnit;4import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;5import com.qaprosoft.carina.core.foundation.api.ApiMethodBuilder;6import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;7import com.qaprosoft.carina.core.foundation.utils.Configuration;8import com.qaprosoft.carina.core.foundation.utils.R;9public class APIMethodBuilderExample {10 public void testAPIMethodBuilder() {11 ApiMethodBuilder apiMethodBuilder = new ApiMethodBuilder();12 apiMethodBuilder.setName("API1");13 apiMethodBuilder.setMethod("GET");14 apiMethodBuilder.setMethodName("api1");15 apiMethodBuilder.setRequestTemplate(R.TESTDATA.get("api1_request_template"));16 apiMethodBuilder.setResponseTemplate(R.TESTDATA.get("api1_response_template"));17 apiMethodBuilder.setExpectedHttpResponseCode(HttpResponseStatusType.OK_200);18 apiMethodBuilder.setExpectedHttpResponseType(AbstractApiMethodV2.CONTENT_TYPE_JSON);19 apiMethodBuilder.setBaseURI(Configuration.get(Configuration.Parameter.URL));20 apiMethodBuilder.setURI("api1");21 apiMethodBuilder.setRequestHeaders(R.TESTDATA.get("api1_request_headers"));22 apiMethodBuilder.setRequestTemplate(R.TESTDATA.get("api1_request_template"));23 apiMethodBuilder.setResponseTemplate(R.TESTDATA.get("api1_response_template"));24 apiMethodBuilder.setExpectedHttpResponseCode(HttpResponseStatusType.OK_200);25 apiMethodBuilder.setExpectedHttpResponseType(AbstractApiMethodV2.CONTENT_TYPE_JSON);26 apiMethodBuilder.setBaseURI(Configuration.get(Configuration.Parameter.URL));

Full Screen

Full Screen

APIMethodBuilder

Using AI Code Generation

copy

Full Screen

1package com.qaprosoft.carina.demo.api;2import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;3import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;4import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;5import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;6import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;7import com.qaprosoft.carina.core.foundation.utils.Configuration;8import com.qa

Full Screen

Full Screen

APIMethodBuilder

Using AI Code Generation

copy

Full Screen

1package com.qaprosoft.carina.core.foundation.api;2import java.util.HashMap;3import java.util.Map;4import org.testng.Assert;5import org.testng.annotations.Test;6import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;7public class APIMethodBuilderTest {8 public void testAPIMethodBuilder() {9 APIMethodBuilder apiMethodBuilder = new APIMethodBuilder();10 apiMethodBuilder.setMethod("GET");11 apiMethodBuilder.setURI("api/users?page=2");12 apiMethodBuilder.addPathParameter("page", "2");13 apiMethodBuilder.addHeader("Content-Type", "application/json");14 apiMethodBuilder.addHeader("Accept", "application/json");15 apiMethodBuilder.addHeader("Accept-Encoding", "gzip, deflate, br");16 apiMethodBuilder.addHeader("Accept-Language", "en-US,en;q=0.9");17 apiMethodBuilder.addHeader("Connection", "keep-alive");18 apiMethodBuilder.addHeader("Host", "reqres.in");19 apiMethodBuilder.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36");20 apiMethodBuilder.addHeader("X-Forwarded-Port", "443");21 apiMethodBuilder.addHeader("X-Forwarded-Proto", "https");22 apiMethodBuilder.addHeader("X-Real-Ip", "

Full Screen

Full Screen

APIMethodBuilder

Using AI Code Generation

copy

Full Screen

1package com.qaprosoft.carina.demo.api;2import org.apache.log4j.Logger;3import org.testng.Assert;4import org.testng.annotations.Test;5import com.qaprosoft.carina.core.foundation.api.AbstractApiMethodV2;6import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;7import com.qaprosoft.carina.core.foundation.utils.Configuration;8import com.qaprosoft.carina.core.foundation.utils.R;9import com.qaprosoft.carina.core.foundation.utils.ownership.MethodOwner;10public class APIMethodBuilderTest {11 protected static final Logger LOGGER = Logger.getLogger(APIMethodBuilderTest.class);12 @MethodOwner(owner = "qpsdemo")13 public void testAPIMethodBuilder() {14 AbstractApiMethodV2 apiMethod = new AbstractApiMethodV2(R.TESTDATA.get("api.method_builder.url")) {15 };16 apiMethod.getRequest().addParameter("id", R.TESTDATA.get("api.method_builder.id"));17 apiMethod.callAPI();18 apiMethod.validateResponseAgainstJSONSchema("api_method_builder_test_schema.json");19 apiMethod.validateResponse(HttpResponseStatusType.OK_200);20 String responseAsString = apiMethod.getResponse().asString();21 LOGGER.info("Response as string: " + responseAsString);22 APIMethodBuilderResponse responseAsPOJO = apiMethod.getResponse().asPojo(APIMethodBuilderResponse.class);23 LOGGER.info("Response as POJO: " + responseAsPOJO);24 APIMethodBuilderResponse responseAsPOJO2 = apiMethod.getResponse().asPojo(APIMethodBuilderResponse.class);25 LOGGER.info("Response as POJO: " + responseAsPOJO2);26 Assert.assertEquals(responseAsPOJO.getId(), Integer.parseInt(R.TESTDATA.get("api.method_builder.id")));27 Assert.assertEquals(responseAsPOJO.getName(), R.TESTDATA.get("api.method_builder.name"));28 Assert.assertEquals(responseAsPOJO.getYear(), R.TESTDATA.get("api.method_builder.year"));29 Assert.assertEquals(responseAsPOJO.getColor(), R.TESTDATA.get("api.method_builder.color"));30 Assert.assertEquals(responseAsPOJO.getPantoneValue(), R.TESTDATA.get("api.method_builder.pantone

Full Screen

Full Screen

APIMethodBuilder

Using AI Code Generation

copy

Full Screen

1package com.qaprosoft.carina.core.foundation.api;2import org.apache.http.HttpStatus;3import com.qaprosoft.carina.core.foundation.api.http.HttpResponseStatusType;4public class TestAPI {5public static void main(String[] args) {6APIMethodBuilder builder = new APIMethodBuilder();7builder.setMethodName("testMethod");8builder.setMethodPath("/test/path");9builder.setHttpMethod("GET");10builder.setResponseStatusType(HttpResponseStatusType.OK_200);11builder.setResponseStatus(HttpStatus.SC_OK);12builder.setResponseStatusLine("HTTP/1.1 200 OK");13builder.setResponseContentType("application/json");14builder.setResponseContent("{\"id\":1,\"name\":\"Test\"}");15builder.setResponseContentEncoding("UTF-8");16builder.setResponseContentLength(20);17builder.setResponseContentLanguage("en-US");18builder.setResponseContentCharset("UTF-8");

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.

Run Carina automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used methods in APIMethodBuilder

Test Your Web Or Mobile Apps On 3000+ Browsers

Signup for free

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful