@intuned/browser-dev 2.2.3-unify-sdks.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +21 -0
- package/.eslintignore +10 -0
- package/.eslintrc.js +39 -0
- package/LICENSE +43 -0
- package/dist/ai-extractors/AnthropicClient/index.js +23 -0
- package/dist/ai-extractors/export.d.js +5 -0
- package/dist/ai-extractors/export.d.ts +422 -0
- package/dist/ai-extractors/extractStructuredData.js +79 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/constants.js +7 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/errors.js +42 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingClaude.js +149 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingGoogle.js +37 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingOpenAi.js +144 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStrucutredDataUsingAiInstance.js +123 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/index.js +55 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/isItemTableHeaderOrFooter.js +96 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/screenshotHelpers.js +55 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/types.js +5 -0
- package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/utils.js +53 -0
- package/dist/ai-extractors/extractionHelpers/types.js +5 -0
- package/dist/ai-extractors/fileExtractors.js +176 -0
- package/dist/ai-extractors/index.js +31 -0
- package/dist/ai-extractors/jsonSchema.d.js +5 -0
- package/dist/ai-extractors/jsonSchema.d.ts +49 -0
- package/dist/ai-extractors/openAiClients/index.js +23 -0
- package/dist/ai-extractors/validators.js +239 -0
- package/dist/browser/ai/export.d.js +3 -0
- package/dist/browser/ai/export.d.ts +587 -0
- package/dist/browser/ai/extractMarkdown.js +15 -0
- package/dist/browser/ai/extractStructuredData.js +231 -0
- package/dist/browser/ai/extractStructuredDataUsingAi.js +140 -0
- package/dist/browser/ai/extractionHelpers/screenshotHelpers.js +55 -0
- package/dist/browser/ai/extractionHelpers/validateSchema.js +148 -0
- package/dist/browser/ai/index.d.ts +587 -0
- package/dist/browser/ai/index.js +19 -0
- package/dist/browser/ai/isPageLoaded.js +67 -0
- package/dist/browser/ai/prompt.js +39 -0
- package/dist/browser/ai/tests/testCheckAllTypesAreStrings.spec.js +143 -0
- package/dist/browser/ai/tests/testExtractStructuredData.spec.js +622 -0
- package/dist/browser/ai/tools/index.js +48 -0
- package/dist/browser/ai/types/errors.js +67 -0
- package/dist/browser/ai/types/models.js +45 -0
- package/dist/browser/ai/types/types.js +48 -0
- package/dist/browser/ai/validators.js +136 -0
- package/dist/common/Logger/index.js +60 -0
- package/dist/common/Logger/types.js +5 -0
- package/dist/common/SdkError.js +50 -0
- package/dist/common/aiModelsValidations.js +50 -0
- package/dist/common/browser_scripts.js +2596 -0
- package/dist/common/ensureBrowserScripts.js +17 -0
- package/dist/common/environmentVariables.js +16 -0
- package/dist/common/eventTracking/getAiTrackingHeaders.js +31 -0
- package/dist/common/eventTracking/getFileTrackingHeaders.js +23 -0
- package/dist/common/extendedTest.js +148 -0
- package/dist/common/extractionHelpers.js +19 -0
- package/dist/common/formatZodError.js +18 -0
- package/dist/common/fuzzySearch/fuzzySearch.test.js +250 -0
- package/dist/common/fuzzySearch/levenshtein-search.js +298 -0
- package/dist/common/fuzzySearch/utils.js +23 -0
- package/dist/common/getModelProvider.js +18 -0
- package/dist/common/getSimplifiedHtml.js +122 -0
- package/dist/common/hashObject.js +32 -0
- package/dist/common/html2markdown/convertElementToMarkdown.js +469 -0
- package/dist/common/html2markdown/index.js +19 -0
- package/dist/common/jwtTokenManager.js +18 -0
- package/dist/common/loadRuntime.js +16 -0
- package/dist/common/locatorHelpers.js +41 -0
- package/dist/common/matching/collectStrings.js +32 -0
- package/dist/common/matching/levenshtein.js +40 -0
- package/dist/common/matching/matching.js +317 -0
- package/dist/common/matching/types.js +1 -0
- package/dist/common/noEmpty.js +9 -0
- package/dist/common/saveSnapshotWithExamples.js +60 -0
- package/dist/common/tests/testEnsureBrowserScript.spec.js +31 -0
- package/dist/common/xpathMapping.js +107 -0
- package/dist/helpers/downloadFile.js +125 -0
- package/dist/helpers/export.d.js +1 -0
- package/dist/helpers/export.d.ts +1294 -0
- package/dist/helpers/extractMarkdown.js +35 -0
- package/dist/helpers/filterEmptyValues.js +54 -0
- package/dist/helpers/gotoUrl.js +93 -0
- package/dist/helpers/index.d.ts +1294 -0
- package/dist/helpers/index.js +115 -0
- package/dist/helpers/processDate.js +25 -0
- package/dist/helpers/resolveUrl.js +63 -0
- package/dist/helpers/sanitizeHtml.js +73 -0
- package/dist/helpers/saveFileToS3.js +46 -0
- package/dist/helpers/scrollToLoadContent.js +50 -0
- package/dist/helpers/tests/extendedTest.js +130 -0
- package/dist/helpers/tests/testDownloadFile.spec.js +197 -0
- package/dist/helpers/tests/testFilterEmptyValues.spec.js +151 -0
- package/dist/helpers/tests/testGoToUrl.spec.js +37 -0
- package/dist/helpers/tests/testIsPageLoaded.spec.js +285 -0
- package/dist/helpers/tests/testProcessDate.spec.js +13 -0
- package/dist/helpers/tests/testResolveUrl.spec.js +341 -0
- package/dist/helpers/tests/testSanitizeHtml.spec.js +330 -0
- package/dist/helpers/tests/testSimplifyHtml.spec.js +251 -0
- package/dist/helpers/tests/testValidateDataUsingSchema.spec.js +380 -0
- package/dist/helpers/tests/testWaitForDomSettled.spec.js +169 -0
- package/dist/helpers/tests/testWaitForNetworkIdle.spec.js +115 -0
- package/dist/helpers/types/Attachment.js +81 -0
- package/dist/helpers/types/CustomTypeRegistry.js +48 -0
- package/dist/helpers/types/RunEnvironment.js +18 -0
- package/dist/helpers/types/ValidationError.js +17 -0
- package/dist/helpers/types/index.js +51 -0
- package/dist/helpers/uploadFileToS3.js +153 -0
- package/dist/helpers/utils/getS3Client.js +21 -0
- package/dist/helpers/utils/index.js +73 -0
- package/dist/helpers/utils/isDownload.js +10 -0
- package/dist/helpers/utils/isGenerateCodeMode.js +9 -0
- package/dist/helpers/utils/isLocator.js +9 -0
- package/dist/helpers/utils/jwtTokenManager.js +18 -0
- package/dist/helpers/validateDataUsingSchema.js +119 -0
- package/dist/helpers/waitForDomSettled.js +182 -0
- package/dist/helpers/waitForNetworkIdle.js +191 -0
- package/dist/index.d.js +82 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +84 -0
- package/dist/intunedServices/ApiGateway/aiApiGateway.js +87 -0
- package/dist/intunedServices/ApiGateway/factory.js +13 -0
- package/dist/intunedServices/ApiGateway/providers/Anthropic.js +26 -0
- package/dist/intunedServices/ApiGateway/providers/Gemini.js +29 -0
- package/dist/intunedServices/ApiGateway/providers/OpenAI.js +29 -0
- package/dist/intunedServices/ApiGateway/tests/testApiGateway.spec.js +221 -0
- package/dist/intunedServices/ApiGateway/types.js +11 -0
- package/dist/intunedServices/cache/cache.js +61 -0
- package/dist/intunedServices/cache/index.js +12 -0
- package/dist/intunedServices/cache/tests/testCache.spec.js +117 -0
- package/dist/optimized-extractors/common/buildExamplesPrompt.js +12 -0
- package/dist/optimized-extractors/common/buildImagesFromPage.js +55 -0
- package/dist/optimized-extractors/common/extractStructuredDataUsingClaude.js +149 -0
- package/dist/optimized-extractors/common/extractStructuredDataUsingGoogle.js +37 -0
- package/dist/optimized-extractors/common/extractStructuredDataUsingOpenAi.js +145 -0
- package/dist/optimized-extractors/common/extractStrucutredDataUsingAiInstance.js +122 -0
- package/dist/optimized-extractors/common/findTableHeaders.js +175 -0
- package/dist/optimized-extractors/common/index.js +55 -0
- package/dist/optimized-extractors/common/isTableHeaderOrFooter.js +97 -0
- package/dist/optimized-extractors/common/matching/matching.js +212 -0
- package/dist/optimized-extractors/common/matching/matching.test.js +655 -0
- package/dist/optimized-extractors/common/matching/types.js +18 -0
- package/dist/optimized-extractors/common/matching/utils.js +184 -0
- package/dist/optimized-extractors/common/utils.js +58 -0
- package/dist/optimized-extractors/export.d.js +5 -0
- package/dist/optimized-extractors/export.d.ts +397 -0
- package/dist/optimized-extractors/extractArray.js +120 -0
- package/dist/optimized-extractors/extractObject.js +104 -0
- package/dist/optimized-extractors/index.d.ts +397 -0
- package/dist/optimized-extractors/index.js +31 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/dynamicListExtractor.spec.js +312 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/findSetOfXpathsToCreateAnArrayExtractor.test.js +22 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/getContainerElement.test.js +21 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/partOfSameArrayXpath.test.js +42 -0
- package/dist/optimized-extractors/listExtractionHelpers/__tests__/verifyThatAllXpathsArePartOfSameArray.test.js +9 -0
- package/dist/optimized-extractors/listExtractionHelpers/dynamicListExtractor.js +152 -0
- package/dist/optimized-extractors/listExtractionHelpers/errors.js +46 -0
- package/dist/optimized-extractors/listExtractionHelpers/getListMatches.js +14 -0
- package/dist/optimized-extractors/listExtractionHelpers/runAiExtraction.js +240 -0
- package/dist/optimized-extractors/listExtractionHelpers/typesAndSchema.js +5 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/extractPropertiesUsingGPTFromArray.js +277 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/extractStructuredListUsingAi.js +44 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/getListContainerXpath.js +94 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/getRelativeContainerXpathSelector.js +20 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/getSimplifiedHtmlPerListItem.js +21 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/tablesUtils.js +48 -0
- package/dist/optimized-extractors/listExtractionHelpers/utils/validateOptions.js +52 -0
- package/dist/optimized-extractors/models/anthropicModel.js +23 -0
- package/dist/optimized-extractors/models/openaiModel.js +23 -0
- package/dist/optimized-extractors/objectExtractionHelpers/AIExtractors.js +73 -0
- package/dist/optimized-extractors/objectExtractionHelpers/__tests__/checksumUtils.test.js +103 -0
- package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromLocator.spec.js +107 -0
- package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromPage.spec.js +107 -0
- package/dist/optimized-extractors/objectExtractionHelpers/calculateObjectExampleHash.js +28 -0
- package/dist/optimized-extractors/objectExtractionHelpers/captureSnapshot.js +26 -0
- package/dist/optimized-extractors/objectExtractionHelpers/checksumUtils.js +32 -0
- package/dist/optimized-extractors/objectExtractionHelpers/constants.js +7 -0
- package/dist/optimized-extractors/objectExtractionHelpers/dynamicObjectExtractor.js +106 -0
- package/dist/optimized-extractors/objectExtractionHelpers/errors.js +42 -0
- package/dist/optimized-extractors/objectExtractionHelpers/findDomMatches.js +54 -0
- package/dist/optimized-extractors/objectExtractionHelpers/getSimplifiedHtml.js +122 -0
- package/dist/optimized-extractors/objectExtractionHelpers/typesAndSchemas.js +5 -0
- package/dist/optimized-extractors/objectExtractionHelpers/validateDynamicObjectExtractorOptions.js +52 -0
- package/dist/optimized-extractors/types/aiModelsValidation.js +45 -0
- package/dist/optimized-extractors/types/errors.js +42 -0
- package/dist/optimized-extractors/types/jsonSchema.d.js +5 -0
- package/dist/optimized-extractors/types/jsonSchema.d.ts +50 -0
- package/dist/optimized-extractors/types/types.js +5 -0
- package/dist/optimized-extractors/validators.js +152 -0
- package/dist/vite-env.d.js +1 -0
- package/dist/vite-env.d.ts +9 -0
- package/docs.md +14 -0
- package/how-to-run-tests.md +10 -0
- package/intuned-runtime-setup.md +13 -0
- package/package.json +124 -0
- package/tsconfig.eslint.json +5 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _extendedTest = require("./extendedTest");
|
|
4
|
+
var _playwrightCore = require("playwright-core");
|
|
5
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
6
|
+
var _ = require("..");
|
|
7
|
+
var _promises = require("fs/promises");
|
|
8
|
+
var _os = require("os");
|
|
9
|
+
var _path = require("path");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
const content = `
|
|
12
|
+
<!DOCTYPE html>
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="UTF-8">
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
17
|
+
<title>Test Fixture Page</title>
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<h1>Test Fixture Page</h1>
|
|
21
|
+
<p>This is a simple HTML page used for testing purposes.</p>
|
|
22
|
+
<div>
|
|
23
|
+
<h3>Downloadable Image</h3>
|
|
24
|
+
<p>Image for download:</p>
|
|
25
|
+
<img src="https://cdn11.bigcommerce.com/s-scmrv6kkrz/images/stencil/1280x1280/products/192719/166712/1891-clear-14-vdc-miniature-lb93__16581.1568390384.jpg?c=2" alt="Sample placeholder image" width="400" height="300">
|
|
26
|
+
<br>
|
|
27
|
+
<a href="https://cdn11.bigcommerce.com/s-scmrv6kkrz/images/stencil/1280x1280/products/192719/166712/1891-clear-14-vdc-miniature-lb93__16581.1568390384.jpg?c=2" download="sample-image.png">Download Image</a>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<div>
|
|
31
|
+
<h3>Download normal file</h3>
|
|
32
|
+
<a href="https://intuned-docs-public-images.s3.amazonaws.com/32UP83A_ENG_US.pdf" download="sample-file.txt">Download Text File</a>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<div>
|
|
36
|
+
<h3>Large PDF Download</h3>
|
|
37
|
+
<a href="https://intuned-docs-public-images.s3.us-west-2.amazonaws.com/large_pdf.pdf">Download Text File</a>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
</body>
|
|
41
|
+
</html>
|
|
42
|
+
`;
|
|
43
|
+
async function createUserDirWithPreferences() {
|
|
44
|
+
const tempDir = await (0, _promises.mkdtemp)((0, _path.join)((0, _os.tmpdir)(), "pw-"));
|
|
45
|
+
const userDir = (0, _path.join)(tempDir, "userdir");
|
|
46
|
+
const defaultDir = (0, _path.join)(userDir, "Default");
|
|
47
|
+
await (0, _promises.mkdir)(defaultDir, {
|
|
48
|
+
recursive: true
|
|
49
|
+
});
|
|
50
|
+
const preferences = {
|
|
51
|
+
plugins: {
|
|
52
|
+
always_open_pdf_externally: true
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const preferencesPath = (0, _path.join)(defaultDir, "Preferences");
|
|
56
|
+
await (0, _promises.writeFile)(preferencesPath, JSON.stringify(preferences));
|
|
57
|
+
return (0, _path.resolve)(userDir);
|
|
58
|
+
}
|
|
59
|
+
_extendedTest.describe.skip("TestNotInGeneration", () => {
|
|
60
|
+
let context;
|
|
61
|
+
let page;
|
|
62
|
+
(0, _extendedTest.beforeAll)(async () => {
|
|
63
|
+
const dir = await createUserDirWithPreferences();
|
|
64
|
+
process.env.MODE = "";
|
|
65
|
+
context = await _playwrightCore.chromium.launchPersistentContext(dir, {
|
|
66
|
+
headless: false,
|
|
67
|
+
args: ["--no-first-run", "--disable-sync", "--disable-translate", "--disable-features=TranslateUI", "--disable-features=NetworkService", "--lang=en", "--disable-blink-features=AutomationControlled"],
|
|
68
|
+
acceptDownloads: true
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
(0, _extendedTest.afterAll)(async () => {
|
|
72
|
+
await context.close();
|
|
73
|
+
});
|
|
74
|
+
(0, _extendedTest.beforeEach)(async () => {
|
|
75
|
+
page = await context.newPage();
|
|
76
|
+
});
|
|
77
|
+
(0, _extendedTest.afterEach)(async () => {
|
|
78
|
+
await page.close();
|
|
79
|
+
});
|
|
80
|
+
(0, _extendedTest.test)("should not cancel download", async () => {
|
|
81
|
+
await page.setContent(content);
|
|
82
|
+
const download = await (0, _.downloadFile)({
|
|
83
|
+
page,
|
|
84
|
+
trigger: "https://intuned-docs-public-images.s3.amazonaws.com/32UP83A_ENG_US.pdf"
|
|
85
|
+
});
|
|
86
|
+
const downloadPath = await download.path();
|
|
87
|
+
(0, _extendedTest.expect)(download.suggestedFilename()).toBeDefined();
|
|
88
|
+
(0, _extendedTest.expect)(downloadPath).toBeDefined();
|
|
89
|
+
});
|
|
90
|
+
(0, _extendedTest.test)("should download image successfully", async () => {
|
|
91
|
+
await page.setContent(content);
|
|
92
|
+
const downloadedImage = await (0, _.downloadFile)({
|
|
93
|
+
page,
|
|
94
|
+
trigger: "https://cdn11.bigcommerce.com/s-scmrv6kkrz/images/stencil/1280x1280/products/192719/166712/1891-clear-14-vdc-miniature-lb93__16581.1568390384.jpg?c=2"
|
|
95
|
+
});
|
|
96
|
+
const path = await downloadedImage.path();
|
|
97
|
+
(0, _extendedTest.expect)(path).toBeDefined();
|
|
98
|
+
(0, _extendedTest.expect)(String(path)).toContain("/var/folders/");
|
|
99
|
+
});
|
|
100
|
+
(0, _extendedTest.test)("should upload image to s3", async () => {
|
|
101
|
+
await page.setContent(content);
|
|
102
|
+
const downloadedImage = await (0, _.downloadFile)({
|
|
103
|
+
page,
|
|
104
|
+
trigger: "https://cdn11.bigcommerce.com/s-scmrv6kkrz/images/stencil/1280x1280/products/192719/166712/1891-clear-14-vdc-miniature-lb93__16581.1568390384.jpg?c=2"
|
|
105
|
+
});
|
|
106
|
+
(0, _extendedTest.expect)(downloadedImage).toBeDefined();
|
|
107
|
+
const path = await downloadedImage.path();
|
|
108
|
+
(0, _extendedTest.expect)(_fs.default.existsSync(path)).toBe(true);
|
|
109
|
+
const uploadedFile = await (0, _.uploadFileToS3)({
|
|
110
|
+
file: downloadedImage
|
|
111
|
+
});
|
|
112
|
+
(0, _extendedTest.expect)(_fs.default.existsSync(path)).toBe(false);
|
|
113
|
+
(0, _extendedTest.expect)(uploadedFile.suggestedFileName).toBeDefined();
|
|
114
|
+
(0, _extendedTest.expect)(uploadedFile.bucket).toBe(process.env.INTUNED_S3_BUCKET);
|
|
115
|
+
});
|
|
116
|
+
(0, _extendedTest.test)("should upload file to s3", async () => {
|
|
117
|
+
await page.setContent(content);
|
|
118
|
+
const download = await (0, _.downloadFile)({
|
|
119
|
+
page,
|
|
120
|
+
trigger: "https://intuned-docs-public-images.s3.amazonaws.com/32UP83A_ENG_US.pdf"
|
|
121
|
+
});
|
|
122
|
+
_extendedTest.expect;
|
|
123
|
+
const uploadedFile = await (0, _.uploadFileToS3)({
|
|
124
|
+
file: download
|
|
125
|
+
});
|
|
126
|
+
(0, _extendedTest.expect)(uploadedFile.suggestedFileName).toBeDefined();
|
|
127
|
+
(0, _extendedTest.expect)(uploadedFile.bucket).toBe(process.env.INTUNED_S3_BUCKET);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
(0, _extendedTest.describe)("TestInGeneration", () => {
|
|
131
|
+
let context;
|
|
132
|
+
let page;
|
|
133
|
+
(0, _extendedTest.beforeAll)(async () => {
|
|
134
|
+
process.env.MODE = "generate_code";
|
|
135
|
+
const dir = await createUserDirWithPreferences();
|
|
136
|
+
context = await _playwrightCore.chromium.launchPersistentContext(dir, {
|
|
137
|
+
headless: false,
|
|
138
|
+
userAgent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
|
|
139
|
+
args: ["--no-first-run", "--disable-sync", "--disable-translate", "--disable-features=TranslateUI", "--disable-features=NetworkService", "--lang=en", "--disable-blink-features=AutomationControlled"],
|
|
140
|
+
acceptDownloads: true
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
(0, _extendedTest.afterAll)(async () => {
|
|
144
|
+
await context.close();
|
|
145
|
+
});
|
|
146
|
+
(0, _extendedTest.beforeEach)(async () => {
|
|
147
|
+
page = await context.newPage();
|
|
148
|
+
});
|
|
149
|
+
(0, _extendedTest.afterEach)(async () => {
|
|
150
|
+
await page.close();
|
|
151
|
+
});
|
|
152
|
+
(0, _extendedTest.test)("should cancel download", async () => {
|
|
153
|
+
await page.setContent(content);
|
|
154
|
+
const largePdfLocator = page.locator("xpath=//a[contains(@href, 'large_pdf.pdf')]");
|
|
155
|
+
const downloadedFile = await (0, _.downloadFile)({
|
|
156
|
+
page,
|
|
157
|
+
trigger: largePdfLocator
|
|
158
|
+
});
|
|
159
|
+
await (0, _extendedTest.expect)(async () => {
|
|
160
|
+
await downloadedFile.path();
|
|
161
|
+
}).rejects.toThrow(/canceled/);
|
|
162
|
+
});
|
|
163
|
+
(0, _extendedTest.test)("should download image successfully", async () => {
|
|
164
|
+
await page.setContent(content);
|
|
165
|
+
const downloadedImage = await (0, _.downloadFile)({
|
|
166
|
+
page,
|
|
167
|
+
trigger: "https://cdn11.bigcommerce.com/s-scmrv6kkrz/images/stencil/1280x1280/products/192719/166712/1891-clear-14-vdc-miniature-lb93__16581.1568390384.jpg?c=2"
|
|
168
|
+
});
|
|
169
|
+
const cancelled = await downloadedImage.failure();
|
|
170
|
+
(0, _extendedTest.expect)(cancelled).toContain("canceled");
|
|
171
|
+
});
|
|
172
|
+
(0, _extendedTest.test)("should upload image to s3", async () => {
|
|
173
|
+
process.env.S3_BUCKET = "mock-bucket";
|
|
174
|
+
process.env.S3_REGION = "mock-region";
|
|
175
|
+
await page.setContent(content);
|
|
176
|
+
const downloadedImage = await (0, _.downloadFile)({
|
|
177
|
+
page,
|
|
178
|
+
trigger: "https://cdn11.bigcommerce.com/s-scmrv6kkrz/images/stencil/1280x1280/products/192719/166712/1891-clear-14-vdc-miniature-lb93__16581.1568390384.jpg?c=2"
|
|
179
|
+
});
|
|
180
|
+
(0, _extendedTest.expect)(downloadedImage.path).toBeDefined();
|
|
181
|
+
});
|
|
182
|
+
(0, _extendedTest.test)("should upload file to s3", async () => {
|
|
183
|
+
await page.setContent(content);
|
|
184
|
+
const download = await (0, _.downloadFile)({
|
|
185
|
+
page,
|
|
186
|
+
trigger: "https://intuned-docs-public-images.s3.amazonaws.com/32UP83A_ENG_US.pdf"
|
|
187
|
+
});
|
|
188
|
+
(0, _extendedTest.expect)(download).toBeDefined();
|
|
189
|
+
(0, _extendedTest.expect)(typeof download.suggestedFilename).toBe("function");
|
|
190
|
+
(0, _extendedTest.expect)(typeof download.path).toBe("function");
|
|
191
|
+
const uploadedFile = await (0, _.uploadFileToS3)({
|
|
192
|
+
file: download
|
|
193
|
+
});
|
|
194
|
+
(0, _extendedTest.expect)(uploadedFile.bucket).toBe("testing_bucket");
|
|
195
|
+
(0, _extendedTest.expect)(uploadedFile.region).toBe("testing_region");
|
|
196
|
+
});
|
|
197
|
+
});
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _extendedTest = require("./extendedTest");
|
|
4
|
+
var _ = require("..");
|
|
5
|
+
(0, _extendedTest.describe)("Filter Empty Values Utility Functions Tests", () => {
|
|
6
|
+
(0, _extendedTest.test)("should filter empty JSON fields", async () => {
|
|
7
|
+
const inputData = {
|
|
8
|
+
field1: "value1",
|
|
9
|
+
field2: "",
|
|
10
|
+
field3: null,
|
|
11
|
+
field4: 0,
|
|
12
|
+
field5: [],
|
|
13
|
+
field6: {},
|
|
14
|
+
field7: "value2"
|
|
15
|
+
};
|
|
16
|
+
const expectedOutput = {
|
|
17
|
+
field1: "value1",
|
|
18
|
+
field4: 0,
|
|
19
|
+
field7: "value2"
|
|
20
|
+
};
|
|
21
|
+
const filteredResults = (0, _.filterEmptyValues)({
|
|
22
|
+
data: inputData
|
|
23
|
+
});
|
|
24
|
+
console.log("Filtered results:", filteredResults);
|
|
25
|
+
(0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
|
|
26
|
+
});
|
|
27
|
+
(0, _extendedTest.test)("should filter nested empty JSON fields", async () => {
|
|
28
|
+
const inputData = {
|
|
29
|
+
field1: "value1",
|
|
30
|
+
field2: {
|
|
31
|
+
subfield1: "",
|
|
32
|
+
subfield2: null,
|
|
33
|
+
subfield3: "value3"
|
|
34
|
+
},
|
|
35
|
+
field3: [],
|
|
36
|
+
field4: {
|
|
37
|
+
subfield4: 0,
|
|
38
|
+
subfield5: {}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const expectedOutput = {
|
|
42
|
+
field1: "value1",
|
|
43
|
+
field2: {
|
|
44
|
+
subfield3: "value3"
|
|
45
|
+
},
|
|
46
|
+
field4: {
|
|
47
|
+
subfield4: 0
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const filteredResults = (0, _.filterEmptyValues)({
|
|
51
|
+
data: inputData
|
|
52
|
+
});
|
|
53
|
+
console.log("Filtered results:", filteredResults);
|
|
54
|
+
(0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
|
|
55
|
+
});
|
|
56
|
+
(0, _extendedTest.test)("should handle empty input object", async () => {
|
|
57
|
+
const inputData = {};
|
|
58
|
+
const expectedOutput = {};
|
|
59
|
+
const filteredResults = (0, _.filterEmptyValues)({
|
|
60
|
+
data: inputData
|
|
61
|
+
});
|
|
62
|
+
(0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
|
|
63
|
+
});
|
|
64
|
+
(0, _extendedTest.test)("should handle object with all empty values", async () => {
|
|
65
|
+
const inputData = {
|
|
66
|
+
field1: "",
|
|
67
|
+
field2: null,
|
|
68
|
+
field3: undefined,
|
|
69
|
+
field4: [],
|
|
70
|
+
field5: {}
|
|
71
|
+
};
|
|
72
|
+
const expectedOutput = {};
|
|
73
|
+
const filteredResults = (0, _.filterEmptyValues)({
|
|
74
|
+
data: inputData
|
|
75
|
+
});
|
|
76
|
+
(0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
|
|
77
|
+
});
|
|
78
|
+
(0, _extendedTest.test)("should preserve falsy values that are not empty", async () => {
|
|
79
|
+
const inputData = {
|
|
80
|
+
field1: 0,
|
|
81
|
+
field2: false,
|
|
82
|
+
field3: "",
|
|
83
|
+
field4: null,
|
|
84
|
+
field5: "valid string"
|
|
85
|
+
};
|
|
86
|
+
const expectedOutput = {
|
|
87
|
+
field1: 0,
|
|
88
|
+
field2: false,
|
|
89
|
+
field5: "valid string"
|
|
90
|
+
};
|
|
91
|
+
const filteredResults = (0, _.filterEmptyValues)({
|
|
92
|
+
data: inputData
|
|
93
|
+
});
|
|
94
|
+
(0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
|
|
95
|
+
});
|
|
96
|
+
(0, _extendedTest.test)("should handle deeply nested objects", async () => {
|
|
97
|
+
const inputData = {
|
|
98
|
+
level1: {
|
|
99
|
+
level2: {
|
|
100
|
+
level3: {
|
|
101
|
+
field1: "value",
|
|
102
|
+
field2: "",
|
|
103
|
+
field3: null
|
|
104
|
+
},
|
|
105
|
+
emptyField: {}
|
|
106
|
+
},
|
|
107
|
+
field4: "another value"
|
|
108
|
+
},
|
|
109
|
+
emptyArray: []
|
|
110
|
+
};
|
|
111
|
+
const expectedOutput = {
|
|
112
|
+
level1: {
|
|
113
|
+
level2: {
|
|
114
|
+
level3: {
|
|
115
|
+
field1: "value"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
field4: "another value"
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const filteredResults = (0, _.filterEmptyValues)({
|
|
122
|
+
data: inputData
|
|
123
|
+
});
|
|
124
|
+
(0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
|
|
125
|
+
});
|
|
126
|
+
(0, _extendedTest.test)("should handle arrays with objects", async () => {
|
|
127
|
+
const inputData = {
|
|
128
|
+
field1: "value1",
|
|
129
|
+
arrayField: [{
|
|
130
|
+
subfield1: "value",
|
|
131
|
+
subfield2: ""
|
|
132
|
+
}, {
|
|
133
|
+
subfield3: null,
|
|
134
|
+
subfield4: "value2"
|
|
135
|
+
}],
|
|
136
|
+
emptyArray: []
|
|
137
|
+
};
|
|
138
|
+
const expectedOutput = {
|
|
139
|
+
field1: "value1",
|
|
140
|
+
arrayField: [{
|
|
141
|
+
subfield1: "value"
|
|
142
|
+
}, {
|
|
143
|
+
subfield4: "value2"
|
|
144
|
+
}]
|
|
145
|
+
};
|
|
146
|
+
const filteredResults = (0, _.filterEmptyValues)({
|
|
147
|
+
data: inputData
|
|
148
|
+
});
|
|
149
|
+
(0, _extendedTest.expect)(filteredResults).toEqual(expectedOutput);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _extendedTest = require("./extendedTest");
|
|
4
|
+
var _ = require("..");
|
|
5
|
+
var _playwrightCore = require("playwright-core");
|
|
6
|
+
var _dotenv = require("dotenv");
|
|
7
|
+
(0, _dotenv.config)();
|
|
8
|
+
(0, _extendedTest.describe)("goToUrl E2E Tests", () => {
|
|
9
|
+
let browser;
|
|
10
|
+
let page;
|
|
11
|
+
(0, _extendedTest.beforeAll)(async () => {
|
|
12
|
+
browser = await _playwrightCore.chromium.launch({
|
|
13
|
+
headless: false
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
(0, _extendedTest.afterAll)(async () => {
|
|
17
|
+
await browser.close();
|
|
18
|
+
});
|
|
19
|
+
(0, _extendedTest.beforeEach)(async () => {
|
|
20
|
+
page = await browser.newPage();
|
|
21
|
+
});
|
|
22
|
+
(0, _extendedTest.afterEach)(async () => {
|
|
23
|
+
await page.close();
|
|
24
|
+
});
|
|
25
|
+
(0, _extendedTest.describe)("successful navigation", () => {
|
|
26
|
+
const urls = ["https://mhtml-viewer.com/test-html2", "https://www.google.com", "https://github.com"];
|
|
27
|
+
for (const url of urls) {
|
|
28
|
+
(0, _extendedTest.test)(`should navigate to ${url}`, async () => {
|
|
29
|
+
await (0, _.goToUrl)({
|
|
30
|
+
page,
|
|
31
|
+
url,
|
|
32
|
+
waitForLoadingStateUsingAi: false
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _extendedTest = require("./extendedTest");
|
|
4
|
+
var _playwrightCore = require("playwright-core");
|
|
5
|
+
var _isPageLoaded = require("../../browser/ai/isPageLoaded");
|
|
6
|
+
var dotenv = _interopRequireWildcard(require("dotenv"));
|
|
7
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
8
|
+
dotenv.config({
|
|
9
|
+
override: true
|
|
10
|
+
});
|
|
11
|
+
const FULLY_LOADED_PAGE = `
|
|
12
|
+
<!DOCTYPE html>
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="UTF-8">
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
17
|
+
<title>Fully Loaded Page</title>
|
|
18
|
+
<style>
|
|
19
|
+
body { font-family: Arial, sans-serif; margin: 20px; }
|
|
20
|
+
.header { background: #f0f0f0; padding: 20px; }
|
|
21
|
+
.content { margin: 20px 0; }
|
|
22
|
+
.footer { background: #e0e0e0; padding: 20px; }
|
|
23
|
+
.image { width: 200px; height: 150px; background: #ccc; }
|
|
24
|
+
</style>
|
|
25
|
+
</head>
|
|
26
|
+
<body>
|
|
27
|
+
<div class="header">
|
|
28
|
+
<h1>Welcome to Our Website</h1>
|
|
29
|
+
<nav>
|
|
30
|
+
<a href="#home">Home</a> |
|
|
31
|
+
<a href="#about">About</a> |
|
|
32
|
+
<a href="#contact">Contact</a>
|
|
33
|
+
</nav>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="content">
|
|
36
|
+
<h2>Main Content</h2>
|
|
37
|
+
<p>This page is fully loaded with all content visible.</p>
|
|
38
|
+
<div class="image">Image Placeholder</div>
|
|
39
|
+
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="footer">
|
|
42
|
+
<p>© 2024 Test Company. All rights reserved.</p>
|
|
43
|
+
</div>
|
|
44
|
+
</body>
|
|
45
|
+
</html>
|
|
46
|
+
`;
|
|
47
|
+
const LOADING_PAGE = `
|
|
48
|
+
<!DOCTYPE html>
|
|
49
|
+
<html lang="en">
|
|
50
|
+
<head>
|
|
51
|
+
<meta charset="UTF-8">
|
|
52
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
53
|
+
<title>Loading Page</title>
|
|
54
|
+
<style>
|
|
55
|
+
body {
|
|
56
|
+
font-family: Arial, sans-serif;
|
|
57
|
+
display: flex;
|
|
58
|
+
justify-content: center;
|
|
59
|
+
align-items: center;
|
|
60
|
+
height: 100vh;
|
|
61
|
+
margin: 0;
|
|
62
|
+
background: #f5f5f5;
|
|
63
|
+
}
|
|
64
|
+
.loading-container {
|
|
65
|
+
text-align: center;
|
|
66
|
+
}
|
|
67
|
+
.spinner {
|
|
68
|
+
border: 4px solid #f3f3f3;
|
|
69
|
+
border-top: 4px solid #3498db;
|
|
70
|
+
border-radius: 50%;
|
|
71
|
+
width: 50px;
|
|
72
|
+
height: 50px;
|
|
73
|
+
animation: spin 1s linear infinite;
|
|
74
|
+
margin: 0 auto 20px;
|
|
75
|
+
}
|
|
76
|
+
@keyframes spin {
|
|
77
|
+
0% { transform: rotate(0deg); }
|
|
78
|
+
100% { transform: rotate(360deg); }
|
|
79
|
+
}
|
|
80
|
+
.loading-text {
|
|
81
|
+
font-size: 18px;
|
|
82
|
+
color: #666;
|
|
83
|
+
}
|
|
84
|
+
</style>
|
|
85
|
+
</head>
|
|
86
|
+
<body>
|
|
87
|
+
<div class="loading-container">
|
|
88
|
+
<div class="spinner"></div>
|
|
89
|
+
<div class="loading-text">Loading, please wait...</div>
|
|
90
|
+
</div>
|
|
91
|
+
</body>
|
|
92
|
+
</html>
|
|
93
|
+
`;
|
|
94
|
+
const BLANK_PAGE = `
|
|
95
|
+
<!DOCTYPE html>
|
|
96
|
+
<html lang="en">
|
|
97
|
+
<head>
|
|
98
|
+
<meta charset="UTF-8">
|
|
99
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
100
|
+
<title>Blank Page</title>
|
|
101
|
+
<style>
|
|
102
|
+
body { margin: 0; padding: 0; background: white; }
|
|
103
|
+
</style>
|
|
104
|
+
</head>
|
|
105
|
+
<body>
|
|
106
|
+
<!-- Completely blank page -->
|
|
107
|
+
</body>
|
|
108
|
+
</html>
|
|
109
|
+
`;
|
|
110
|
+
const PARTIALLY_LOADED_PAGE = `
|
|
111
|
+
<!DOCTYPE html>
|
|
112
|
+
<html lang="en">
|
|
113
|
+
<head>
|
|
114
|
+
<meta charset="UTF-8">
|
|
115
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
116
|
+
<title>Partially Loaded Page</title>
|
|
117
|
+
<style>
|
|
118
|
+
body { font-family: Arial, sans-serif; margin: 20px; }
|
|
119
|
+
.loaded { opacity: 1; }
|
|
120
|
+
.loading { opacity: 0.3; }
|
|
121
|
+
.placeholder {
|
|
122
|
+
background: #ddd;
|
|
123
|
+
height: 100px;
|
|
124
|
+
margin: 10px 0;
|
|
125
|
+
display: flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
justify-content: center;
|
|
128
|
+
color: #666;
|
|
129
|
+
}
|
|
130
|
+
</style>
|
|
131
|
+
</head>
|
|
132
|
+
<body>
|
|
133
|
+
<h1 class="loaded">Website Header</h1>
|
|
134
|
+
<div class="placeholder loading">Content Loading...</div>
|
|
135
|
+
<div class="placeholder loading">Images Loading...</div>
|
|
136
|
+
<div class="placeholder loading">More Content Loading...</div>
|
|
137
|
+
<p class="loaded">Some content has loaded but other parts are still loading.</p>
|
|
138
|
+
</body>
|
|
139
|
+
</html>
|
|
140
|
+
`;
|
|
141
|
+
const ERROR_PAGE = `
|
|
142
|
+
<!DOCTYPE html>
|
|
143
|
+
<html lang="en">
|
|
144
|
+
<head>
|
|
145
|
+
<meta charset="UTF-8">
|
|
146
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
147
|
+
<title>Error Page</title>
|
|
148
|
+
<style>
|
|
149
|
+
body {
|
|
150
|
+
font-family: Arial, sans-serif;
|
|
151
|
+
display: flex;
|
|
152
|
+
justify-content: center;
|
|
153
|
+
align-items: center;
|
|
154
|
+
height: 100vh;
|
|
155
|
+
margin: 0;
|
|
156
|
+
background: #ffe6e6;
|
|
157
|
+
}
|
|
158
|
+
.error-container {
|
|
159
|
+
text-align: center;
|
|
160
|
+
background: white;
|
|
161
|
+
padding: 40px;
|
|
162
|
+
border-radius: 10px;
|
|
163
|
+
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
164
|
+
}
|
|
165
|
+
.error-code { font-size: 48px; color: #e74c3c; font-weight: bold; }
|
|
166
|
+
.error-message { font-size: 18px; color: #666; margin: 20px 0; }
|
|
167
|
+
</style>
|
|
168
|
+
</head>
|
|
169
|
+
<body>
|
|
170
|
+
<div class="error-container">
|
|
171
|
+
<div class="error-code">404</div>
|
|
172
|
+
<div class="error-message">Page Not Found</div>
|
|
173
|
+
<p>The page you are looking for could not be found.</p>
|
|
174
|
+
</div>
|
|
175
|
+
</body>
|
|
176
|
+
</html>
|
|
177
|
+
`;
|
|
178
|
+
(0, _extendedTest.describe)("isPageLoaded Tests", () => {
|
|
179
|
+
let browser;
|
|
180
|
+
let page;
|
|
181
|
+
(0, _extendedTest.beforeAll)(async () => {
|
|
182
|
+
browser = await _playwrightCore.chromium.launch({
|
|
183
|
+
headless: false
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
(0, _extendedTest.afterAll)(async () => {
|
|
187
|
+
await browser.close();
|
|
188
|
+
});
|
|
189
|
+
(0, _extendedTest.beforeEach)(async () => {
|
|
190
|
+
page = await browser.newPage();
|
|
191
|
+
});
|
|
192
|
+
(0, _extendedTest.afterEach)(async () => {
|
|
193
|
+
await page.close();
|
|
194
|
+
});
|
|
195
|
+
(0, _extendedTest.describe)("Real LLM calls", () => {
|
|
196
|
+
(0, _extendedTest.test)("should detect fully loaded page", async () => {
|
|
197
|
+
await page.setContent(FULLY_LOADED_PAGE);
|
|
198
|
+
await page.waitForSelector("h1", {
|
|
199
|
+
timeout: 5000
|
|
200
|
+
});
|
|
201
|
+
const result = await (0, _isPageLoaded.isPageLoaded)(page, {
|
|
202
|
+
model: "gpt-4o-2024-05-13",
|
|
203
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
204
|
+
timeoutInMs: 10000
|
|
205
|
+
});
|
|
206
|
+
(0, _extendedTest.expect)(result["status"]).toBe(true);
|
|
207
|
+
(0, _extendedTest.expect)(typeof result["reason"]).toBe("string");
|
|
208
|
+
(0, _extendedTest.expect)(result["reason"]).not.toBeNull();
|
|
209
|
+
(0, _extendedTest.expect)(typeof result["cost"]).toBe("number");
|
|
210
|
+
console.log("Fully loaded page result:", result);
|
|
211
|
+
});
|
|
212
|
+
(0, _extendedTest.test)("should detect loading page with spinner", async () => {
|
|
213
|
+
await page.setContent(LOADING_PAGE);
|
|
214
|
+
await page.waitForSelector(".spinner", {
|
|
215
|
+
timeout: 5000
|
|
216
|
+
});
|
|
217
|
+
const apiKey = process.env.OPENAI_API_KEY;
|
|
218
|
+
const result = await (0, _isPageLoaded.isPageLoaded)(page, {
|
|
219
|
+
model: "gpt-4o-2024-05-13",
|
|
220
|
+
apiKey: apiKey,
|
|
221
|
+
timeoutInMs: 10000
|
|
222
|
+
});
|
|
223
|
+
(0, _extendedTest.expect)(result["status"]).toBe(false);
|
|
224
|
+
(0, _extendedTest.expect)(typeof result["reason"]).toBe("string");
|
|
225
|
+
(0, _extendedTest.expect)(result["reason"]).not.toBeNull();
|
|
226
|
+
(0, _extendedTest.expect)(typeof result["cost"]).toBe("number");
|
|
227
|
+
console.log("Loading page result:", result);
|
|
228
|
+
});
|
|
229
|
+
(0, _extendedTest.test)("should detect blank page", async () => {
|
|
230
|
+
await page.setContent(BLANK_PAGE);
|
|
231
|
+
const result = await (0, _isPageLoaded.isPageLoaded)(page, {
|
|
232
|
+
model: "gpt-4o-2024-05-13",
|
|
233
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
234
|
+
timeoutInMs: 10000
|
|
235
|
+
});
|
|
236
|
+
(0, _extendedTest.expect)([false, "Dont know"]).toContain(result["status"]);
|
|
237
|
+
(0, _extendedTest.expect)(typeof result["reason"]).toBe("string");
|
|
238
|
+
(0, _extendedTest.expect)(typeof result["cost"]).toBe("number");
|
|
239
|
+
console.log("Blank page result:", result);
|
|
240
|
+
});
|
|
241
|
+
(0, _extendedTest.test)("should handle partially loaded page", async () => {
|
|
242
|
+
await page.setContent(PARTIALLY_LOADED_PAGE);
|
|
243
|
+
await page.waitForSelector("h1", {
|
|
244
|
+
timeout: 5000
|
|
245
|
+
});
|
|
246
|
+
const result = await (0, _isPageLoaded.isPageLoaded)(page, {
|
|
247
|
+
model: "gpt-4o-2024-05-13",
|
|
248
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
249
|
+
timeoutInMs: 10000
|
|
250
|
+
});
|
|
251
|
+
(0, _extendedTest.expect)([true, false, "Dont know"]).toContain(result["status"]);
|
|
252
|
+
(0, _extendedTest.expect)(typeof result["reason"]).toBe("string");
|
|
253
|
+
(0, _extendedTest.expect)(typeof result["cost"]).toBe("number");
|
|
254
|
+
console.log("Partially loaded page result:", result);
|
|
255
|
+
});
|
|
256
|
+
(0, _extendedTest.test)("should handle error page", async () => {
|
|
257
|
+
await page.setContent(ERROR_PAGE);
|
|
258
|
+
await page.waitForSelector(".error-code", {
|
|
259
|
+
timeout: 5000
|
|
260
|
+
});
|
|
261
|
+
const result = await (0, _isPageLoaded.isPageLoaded)(page, {
|
|
262
|
+
model: "gpt-4o-2024-05-13",
|
|
263
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
264
|
+
timeoutInMs: 10000
|
|
265
|
+
});
|
|
266
|
+
(0, _extendedTest.expect)([true, "Dont know"]).toContain(result["status"]);
|
|
267
|
+
(0, _extendedTest.expect)(typeof result["reason"]).toBe("string");
|
|
268
|
+
(0, _extendedTest.expect)(typeof result["cost"]).toBe("number");
|
|
269
|
+
console.log("Error page result:", result);
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
(0, _extendedTest.describe)("Different model types", () => {
|
|
273
|
+
(0, _extendedTest.test)("should work with claude-3-5-sonnet-20240620", async () => {
|
|
274
|
+
await page.setContent(FULLY_LOADED_PAGE);
|
|
275
|
+
const result = await (0, _isPageLoaded.isPageLoaded)(page, {
|
|
276
|
+
model: "claude-3-5-sonnet-20240620",
|
|
277
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
278
|
+
timeoutInMs: 10000
|
|
279
|
+
});
|
|
280
|
+
(0, _extendedTest.expect)([true, false, "Dont know"]).toContain(result["status"]);
|
|
281
|
+
(0, _extendedTest.expect)(typeof result["reason"]).toBe("string");
|
|
282
|
+
(0, _extendedTest.expect)(typeof result["cost"]).toBe("number");
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _extendedTest = require("./extendedTest");
|
|
4
|
+
var _ = require("..");
|
|
5
|
+
const dates = [["22/11/2024 21:19:05", new Date(2024, 10, 22)], ["13/12/2024", new Date(2024, 11, 13)], ["22/11/2024 15:35:06", new Date(2024, 10, 22)], ["01/17/2025 3:00:00 PM CT", new Date(2025, 0, 17)], ["10/25/2024", new Date(2024, 9, 25)], ["09/18/2024", new Date(2024, 8, 18)], ["10/23/2024 12:06 PM CST", new Date(2024, 9, 23)], ["11/24/2024", new Date(2024, 10, 24)], ["11/28/2024 1:59:59 AM", new Date(2024, 10, 28)], ["11/1/2024 10:30:00 PM", new Date(2024, 10, 1)], ["12/09/2024 9:00 AM", new Date(2024, 11, 9)], ["12/05/2024 9:00 AM", new Date(2024, 11, 5)], ["11/07/2024", new Date(2024, 10, 7)], ["12/10/2024", new Date(2024, 11, 10)], ["10/21/2024", new Date(2024, 9, 21)], ["10/08/2024", new Date(2024, 9, 8)], ["12/19/2024 - 2:00 PM", new Date(2024, 11, 19)], ["11/15/2024", new Date(2024, 10, 15)], ["8/16/2019", new Date(2019, 7, 16)], ["9/28/2024", new Date(2024, 8, 28)], ["5 Dec 2024 8:00 AM PST", new Date(2024, 11, 5)], ["11 Sep 2024", new Date(2024, 8, 11)], ["November 14, 2024", new Date(2024, 10, 14)], ["January 31, 2025, 5:00 pm", new Date(2025, 0, 31)], ["22/11/2024 19:45:00", new Date(2024, 10, 22)], ["09/01/2025 15:00:00", new Date(2025, 8, 1)], ["06/01/2023 11:00:00", new Date(2023, 5, 1)], ["04/30/2023 14:00:00", new Date(2023, 3, 30)]];
|
|
6
|
+
dates.forEach(([dateString, expectedDate]) => {
|
|
7
|
+
(0, _extendedTest.test)(`process_date: ${dateString}`, async () => {
|
|
8
|
+
const result = (0, _.processDate)({
|
|
9
|
+
date: dateString
|
|
10
|
+
});
|
|
11
|
+
(0, _extendedTest.expect)(result).toEqual(expectedDate);
|
|
12
|
+
});
|
|
13
|
+
});
|