diff --git a/e2e/playwright/desktop-export.spec.ts b/e2e/playwright/desktop-export.spec.ts index 6dafd041f4..e1db36caae 100644 --- a/e2e/playwright/desktop-export.spec.ts +++ b/e2e/playwright/desktop-export.spec.ts @@ -104,7 +104,7 @@ test( }, { timeout: 15_000 } ) - .toBe(477481) + .toBe(482669) // clean up output.gltf await fsp.rm('output.gltf') diff --git a/e2e/playwright/projects.spec.ts b/e2e/playwright/projects.spec.ts index 2793f421f0..91f54c2ced 100644 --- a/e2e/playwright/projects.spec.ts +++ b/e2e/playwright/projects.spec.ts @@ -203,7 +203,7 @@ test.describe('Can export from electron app', () => { }, { timeout: 15_000 } ) - .toBe(477481) + .toBe(482669) // clean up output.gltf await fsp.rm('output.gltf') diff --git a/e2e/playwright/testing-settings.spec.ts b/e2e/playwright/testing-settings.spec.ts index b0f7eaa96e..d2ff955081 100644 --- a/e2e/playwright/testing-settings.spec.ts +++ b/e2e/playwright/testing-settings.spec.ts @@ -69,12 +69,15 @@ test.describe('Testing settings', () => { page, }) => { const u = await getUtils(page) - await page.setViewportSize({ width: 1200, height: 500 }) - await u.waitForAuthSkipAppStart() - await page - .getByRole('button', { name: 'Start Sketch' }) - .waitFor({ state: 'visible' }) + await test.step(`Setup`, async () => { + await page.setViewportSize({ width: 1200, height: 500 }) + await u.waitForAuthSkipAppStart() + await page + .getByRole('button', { name: 'Start Sketch' }) + .waitFor({ state: 'visible' }) + }) + // Selectors and constants const paneButtonLocator = page.getByTestId('debug-pane-button') const headingLocator = page.getByRole('heading', { name: 'Settings', @@ -82,11 +85,23 @@ test.describe('Testing settings', () => { }) const inputLocator = page.locator('input[name="modeling-showDebugPanel"]') - // Open the settings modal with the browser keyboard shortcut - await page.keyboard.press('ControlOrMeta+Shift+,') + await test.step('Open settings dialog and set "Show debug panel" to on', async () => { + await page.keyboard.press('ControlOrMeta+Shift+,') + await expect(headingLocator).toBeVisible() + + /** Test to close https://github.com/KittyCAD/modeling-app/issues/2713 */ + await test.step(`Confirm that this dialog has a solid background`, async () => { + await expect + .poll(() => u.getGreatestPixDiff({ x: 600, y: 250 }, [28, 28, 28]), { + timeout: 1000, + message: + 'Checking for solid background, should not see default plane colors', + }) + .toBeLessThan(15) + }) - await expect(headingLocator).toBeVisible() - await page.locator('#showDebugPanel').getByText('OffOn').click() + await page.locator('#showDebugPanel').getByText('OffOn').click() + }) // Close it and open again with keyboard shortcut, while KCL editor is focused // Put the cursor in the editor @@ -262,8 +277,6 @@ test.describe('Testing settings', () => { await page.setViewportSize({ width: 1200, height: 500 }) - page.on('console', console.log) - // Selectors and constants const userThemeColor = '120' const projectThemeColor = '50' @@ -277,7 +290,6 @@ test.describe('Testing settings', () => { const projectLink = page.getByText('bracket') const logoLink = page.getByTestId('app-logo') - // Open the app and set the user theme color await test.step('Set user theme color on home', async () => { await expect(settingsOpenButton).toBeVisible() await settingsOpenButton.click() @@ -296,13 +308,15 @@ test.describe('Testing settings', () => { await expect(projectSettingsTab).toBeChecked() await themeColorSetting.fill(projectThemeColor) await expect(logoLink).toHaveCSS('--primary-hue', projectThemeColor) + await settingsCloseButton.click() }) await test.step('Refresh the application and see project setting applied', async () => { + // Make sure we're done navigating before we reload + await expect(settingsCloseButton).not.toBeVisible() await page.reload({ waitUntil: 'domcontentloaded' }) await expect(logoLink).toHaveCSS('--primary-hue', projectThemeColor) - await settingsCloseButton.click() }) await test.step(`Navigate back to the home view and see user setting applied`, async () => { diff --git a/src/lang/abstractSyntaxTree.test.ts b/src/lang/abstractSyntaxTree.test.ts index 30befb42e6..9aec536a00 100644 --- a/src/lang/abstractSyntaxTree.test.ts +++ b/src/lang/abstractSyntaxTree.test.ts @@ -1766,17 +1766,17 @@ const key = 'c'` const ast = parse(code) if (err(ast)) throw ast const { nonCodeMeta } = ast - expect(nonCodeMeta.nonCodeNodes[0][0]).toEqual(nonCodeMetaInstance) + expect(nonCodeMeta.nonCodeNodes[0]?.[0]).toEqual(nonCodeMetaInstance) // extra whitespace won't change it's position (0) or value (NB the start end would have changed though) const codeWithExtraStartWhitespace = '\n\n\n' + code const ast2 = parse(codeWithExtraStartWhitespace) if (err(ast2)) throw ast2 const { nonCodeMeta: nonCodeMeta2 } = ast2 - expect(nonCodeMeta2.nonCodeNodes[0][0].value).toStrictEqual( + expect(nonCodeMeta2.nonCodeNodes[0]?.[0].value).toStrictEqual( nonCodeMetaInstance.value ) - expect(nonCodeMeta2.nonCodeNodes[0][0].start).not.toBe( + expect(nonCodeMeta2.nonCodeNodes[0]?.[0].start).not.toBe( nonCodeMetaInstance.start ) }) diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index 86ddae8bc2..8223592d9f 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -255,9 +255,9 @@ dependencies = [ [[package]] name = "bson" -version = "2.12.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80cf6f7806607bd58ad490bab34bf60e25455ea4aaf995f897a13324d41ea580" +checksum = "068208f2b6fcfa27a7f1ee37488d2bb8ba2640f68f5475d08e1d9130696aba59" dependencies = [ "ahash", "base64 0.13.1", @@ -1526,9 +1526,9 @@ dependencies = [ [[package]] name = "kittycad-modeling-cmds" -version = "0.2.59" +version = "0.2.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee900033a5804ca2354f0760478e851a0ab04d32b38a9117d0bd4f87a8867110" +checksum = "5128ba683e849388cac4214b65911c343842d559bec10827575c840a47733786" dependencies = [ "anyhow", "chrono", @@ -3427,11 +3427,12 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ts-rs" -version = "9.0.1" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b44017f9f875786e543595076374b9ef7d13465a518dd93d6ccdbf5b432dde8c" +checksum = "3a2f31991cee3dce1ca4f929a8a04fdd11fd8801aac0f2030b0fa8a0a3fef6b9" dependencies = [ "chrono", + "lazy_static", "serde_json", "thiserror", "ts-rs-macros", @@ -3441,9 +3442,9 @@ dependencies = [ [[package]] name = "ts-rs-macros" -version = "9.0.1" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c88cc88fd23b5a04528f3a8436024f20010a16ec18eb23c164b1242f65860130" +checksum = "0ea0b99e8ec44abd6f94a18f28f7934437809dd062820797c52401298116f70e" dependencies = [ "proc-macro2", "quote", diff --git a/src/wasm-lib/Cargo.toml b/src/wasm-lib/Cargo.toml index e24ad4eff8..2eee581c0b 100644 --- a/src/wasm-lib/Cargo.toml +++ b/src/wasm-lib/Cargo.toml @@ -10,7 +10,7 @@ rust-version = "1.73" crate-type = ["cdylib"] [dependencies] -bson = { version = "2.12.0", features = ["uuid-1", "chrono"] } +bson = { version = "2.13.0", features = ["uuid-1", "chrono"] } data-encoding = "2.6.0" gloo-utils = "0.2.0" kcl-lib = { path = "kcl" } @@ -73,7 +73,7 @@ members = [ http = "0.2.12" kittycad = { version = "0.3.20", default-features = false, features = ["js", "requests"] } kittycad-modeling-session = "0.1.4" -kittycad-modeling-cmds = { version = "0.2.59", features = ["websocket"] } +kittycad-modeling-cmds = { version = "0.2.61", features = ["websocket"] } [[test]] name = "executor" diff --git a/src/wasm-lib/kcl/Cargo.toml b/src/wasm-lib/kcl/Cargo.toml index 3a9d246db4..7b6573e04e 100644 --- a/src/wasm-lib/kcl/Cargo.toml +++ b/src/wasm-lib/kcl/Cargo.toml @@ -44,7 +44,7 @@ sha2 = "0.10.8" tabled = { version = "0.15.0", optional = true } thiserror = "1.0.63" toml = "0.8.19" -ts-rs = { version = "9.0.1", features = ["uuid-impl", "url-impl", "chrono-impl", "no-serde-warnings", "serde-json-impl"] } +ts-rs = { version = "10.0.0", features = ["uuid-impl", "url-impl", "chrono-impl", "no-serde-warnings", "serde-json-impl"] } url = { version = "2.5.2", features = ["serde"] } urlencoding = "2.1.3" uuid = { version = "1.10.0", features = ["v4", "js", "serde"] } @@ -62,7 +62,7 @@ web-sys = { version = "0.3.69", features = ["console"] } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] approx = "0.5" -bson = { version = "2.12.0", features = ["uuid-1", "chrono"] } +bson = { version = "2.13.0", features = ["uuid-1", "chrono"] } tokio = { version = "1.39.3", features = ["full"] } tokio-tungstenite = { version = "0.24.0", features = ["rustls-tls-native-roots"] } tower-lsp = { version = "0.20.0", features = ["proposed"] } diff --git a/src/wasm-lib/kcl/src/docs.rs b/src/wasm-lib/kcl/src/docs.rs index 760c11f526..f04d0f7f51 100644 --- a/src/wasm-lib/kcl/src/docs.rs +++ b/src/wasm-lib/kcl/src/docs.rs @@ -40,7 +40,8 @@ pub struct StdLibFnData { /// This struct defines a single argument to a stdlib function. #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, JsonSchema, ts_rs::TS)] -#[ts(export)] +// There's a bug in ts_rs where this isn't correctly imported by StdLibFnData. +#[ts(export_to = "StdLibFnData.ts")] #[serde(rename_all = "camelCase")] pub struct StdLibFnArg { /// The name of the argument. diff --git a/src/wasm-lib/kcl/src/engine/conn_wasm.rs b/src/wasm-lib/kcl/src/engine/conn_wasm.rs index bcb44d1229..dda6b73c6f 100644 --- a/src/wasm-lib/kcl/src/engine/conn_wasm.rs +++ b/src/wasm-lib/kcl/src/engine/conn_wasm.rs @@ -1,9 +1,6 @@ //! Functions for setting up our WebSocket and WebRTC connections for communications with the //! engine. -use std::{ - collections::HashMap, - sync::{Arc, Mutex}, -}; +use std::sync::{Arc, Mutex}; use anyhow::Result; use indexmap::IndexMap;