From 6d7bc446f5c8b3fbf7d3406562e862d93ad08809 Mon Sep 17 00:00:00 2001 From: alisonlhart Date: Thu, 3 Oct 2024 13:21:55 -0400 Subject: [PATCH 1/2] Create an Ansible environment walkthrough --- .vscodeignore | 2 + .../gettingStarted/adt-components.png | Bin 0 -> 33656 bytes .../gettingStarted/install-adt-components.md | 6 ++ package.json | 76 +++--------------- test/ui-test/allTestsSuite.ts | 2 + test/ui-test/walkthroughUiTest.ts | 51 ++++++++++++ 6 files changed, 74 insertions(+), 63 deletions(-) create mode 100644 media/walkthroughs/gettingStarted/adt-components.png create mode 100644 media/walkthroughs/gettingStarted/install-adt-components.md create mode 100644 test/ui-test/walkthroughUiTest.ts diff --git a/.vscodeignore b/.vscodeignore index 74fafd710..84a455e86 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -53,8 +53,10 @@ !media/walkthroughs/gettingStarted/ansible-features/smart-completions-crop.gif !media/walkthroughs/gettingStarted/ansible-features/syntax-highlighting-crop.png !media/walkthroughs/gettingStarted/ansibleEnvironment.md +!media/walkthroughs/gettingStarted/install-adt-components.md !media/walkthroughs/gettingStarted/languageFeatures.md !media/walkthroughs/gettingStarted/selectAnsibleLanguage.md +!media/walkthroughs/gettingStarted/adt-components.png !media/walkthroughs/gettingStarted/all-adt-tools.png !media/walkthroughs/gettingStarted/ansible-extension-settings.png !media/walkthroughs/gettingStarted/language-selector.png diff --git a/media/walkthroughs/gettingStarted/adt-components.png b/media/walkthroughs/gettingStarted/adt-components.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6a6b0fb1cd155f4cdbfa2cf80ac4aed7e1bcda GIT binary patch literal 33656 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 literal 0 HcmV?d00001 diff --git a/media/walkthroughs/gettingStarted/install-adt-components.md b/media/walkthroughs/gettingStarted/install-adt-components.md new file mode 100644 index 000000000..a3304cf0b --- /dev/null +++ b/media/walkthroughs/gettingStarted/install-adt-components.md @@ -0,0 +1,6 @@ + + +

+ image missing +
All the tools inside the Ansible environment package
+
diff --git a/package.json b/package.json index 0d413f85a..f6ee471ec 100644 --- a/package.json +++ b/package.json @@ -48,83 +48,33 @@ "contributes": { "walkthroughs": [ { - "id": "getting-started-with-ansible-extension", - "title": "Getting started with Ansible Extension", - "description": "You first step for knowing and setting up the extension with all the developer features that the Ansible extension has to offer!", + "id": "create-ansible-environment", + "title": "Create an Ansible environment", + "description": "To access Ansible development tools, create an Ansible environment.", "steps": [ { - "id": "create-ansible-file", - "title": "Create an Ansible-YAML file", - "description": "[Open](command:toSide:workbench.action.files.openFile) or [create](command:toSide:workbench.action.files.newUntitledFile?%7B%22languageId%22%3A%22ansible%22%7D) a Ansible-YAML file - make sure to save it as \".yml\" or \".yaml\".\n[Create Ansible Playbook](command:toSide:workbench.action.files.newUntitledFile?%7B%22languageId%22%3A%22ansible%22%7D)\n\nšŸ’” It's normal to see some red tags in the status bar. This is because necessary ansible tools are not installed. We will fix this as we more forward.", + "id": "create-ansible-playbook", + "title": "Create an Ansible playbook", + "description": "This will activate Ansible development tools. Make sure the file is saved as \".yml\" or \".yaml\" .\n[Create Ansible Playbook](command:toSide:workbench.action.files.newUntitledFile?%7B%22languageId%22%3A%22ansible%22%7D)", "media": { "image": "media/walkthroughs/gettingStarted/open-folder.png", "altText": "No image found" } }, { - "id": "check-ansible-language", - "title": "Ensure \"Ansible\" language", - "description": "All the language support is only available for an Ansible file. Make sure that the language of the file is \"Ansible\". If not,\n[Change Language](command:ansible.walkthrough.gettingStarted.setLanguage)\nšŸ” Check out this [section](https://github.com/ansible/vscode-ansible?tab=readme-ov-file#language-association-to-yaml-files) to learn more about ansible language association to yaml files.", + "id": "check-ansible-tag", + "title": "Make sure you see the \"Ansible\" tag in the status bar", + "description": "If your Ansible playbook was successfully created, you should see an Ansible tag in the status bar. If not, you can [change the language](command:ansible.walkthrough.gettingStarted.setLanguage).\nHovering over the Ansible tag can tell you about installed versions or environment issues. If tools are missing or warnings are present, continue to the next step to fix the environment.", "media": { "markdown": "media/walkthroughs/gettingStarted/selectAnsibleLanguage.md" } }, { - "id": "check-ansible-statusbar-tag", - "title": "Check out the Ansible Version tag", - "description": "Hovering over the \"Ansible version\" written in the status-bar can tell you about your entire workspace environment. The following symbols convey the following message: \n $(bracket-dot) - All the required tools are present in the environment.\n $(warning) - Ansible Lint is missing in the environment. Partial diagnostics will be present in the extension.\n $(error) - Ansible is missing in the environment. None of the features in the extension will work properly.\n**Tools missing?** Move on to the next step to set up your environment properly.", + "id": "install-ansible-environment-package", + "title": "Install the Ansible environment package", + "description": "The Ansible environment package contains all of the dependencies your environment needs to work with Ansible development tools. \n[Install Ansible environment package](command:ansible.install-ansible-dev-tools)\nAlternatively, [switch to another environment](command:ansible.python.set.interpreter) that has those installed.", "media": { - "markdown": "media/walkthroughs/gettingStarted/ansibleEnvironment.md" - } - }, - { - "id": "set-up-ansible-environment", - "title": "Set up an Ansible Environment", - "description": "Select or create a new environment for the extension to pick up the ansible binaries.\nšŸ’” This option also lets you to create a new virtual environment too!.\n[Select Environment](command:ansible.python.set.interpreter)\nIf the ansible tools are missing, install the recommended tools within your environment in just one click for a smooth experience.\n[Install Ansible Tools](command:ansible.install-ansible-dev-tools)", - "media": { - "image": "media/walkthroughs/gettingStarted/all-adt-tools.png", - "altText": "No image found" - } - }, - { - "id": "start-writing-ansible-playbook", - "title": "Start writing ansible playbook", - "description": "As you start writing your ansible playbook, the extension will provide all the language support for ansible. \n$(bracket) **Syntax highlighting**\nDistinguishes Ansible keywords, module names and options, jinja expressions and YAML components with distinct highlighting. \n $(gather) **Auto completion**\n Suggests completions based on context, such as vars, plays, blocks, or tasks. \n $(bug) **Diagnostics**\nProvides instant feedback on ansible syntax errors as you type. Additionally, validates ansible content for best practices. \n $(eye) **Hovering**\n Displays documentation when hovering over Ansible elements, sourced from Python module implementations. \n $(go-to-file) **Go to definition**\n Navigates to module implementations, with simple by actions such as clicking while holding ctrl/cmd or using context menus.\nYou can also check the language services logs if required.\n[Open Ansible Services Logs](command:ansible.open-language-server-logs)", - "media": { - "markdown": "media/walkthroughs/gettingStarted/languageFeatures.md" - } - }, - { - "id": "run-ansible-playbook", - "title": "Run the playbook", - "description": "Once done writing the playbook, you can run the playbook without having to leave the editor. Simply right-click on the active editor and go to \"Run playbook via...\"\nšŸ’” If you have \"Ansible Navigator\" installed, you can choose to run your playbook using ansible navigator.", - "media": { - "image": "media/walkthroughs/gettingStarted/run-ansible-playbook.png", - "altText": "No image found" - } - }, - { - "id": "explore-ansible-extension-settings", - "title": "Know your Ansible Extension Settings", - "description": "The extension provides various settings categorised into sections to give you full control over configurations.\n[Open Extension Settings](command:toSide:ansible.extension-settings.open)\n šŸ” Check out this [section](https://ansible.readthedocs.io/projects/vscode-ansible/#configuration) to learn about each setting and how to use them.", - "completionEvents": [ - "onCommand:ansible.extension-settings.open" - ], - "media": { - "image": "media/walkthroughs/gettingStarted/ansible-extension-settings.png", - "altText": "No image found for extension settings" - } - }, - { - "id": "explore-more-resources", - "title": "Explore more resources", - "description": "šŸ“š Learn what is an Ansible Playbook and how to write one using best practices in this [article](https://www.redhat.com/en/topics/automation/what-is-an-ansible-playbook).\nšŸ”¬ Read about the capabilities of various [Ansible Development Tools](https://ansible.readthedocs.io/projects/dev-tools/) to make the best use of them.\nšŸ—’ļø Take a look at our [Release Notes](https://github.com/ansible/vscode-ansible/releases) to learn more about the latest features.\n[Learn more](https://www.ansible.com/blog/deep-dive-on-ansible-vscode-extension/)", - "completionEvents": [ - "onLink:https://www.ansible.com/blog/deep-dive-on-ansible-vscode-extension/" - ], - "media": { - "image": "media/walkthroughs/gettingStarted/learn-more.png", - "altText": "No image found" + "markdown": "media/walkthroughs/gettingStarted/install-adt-components.md" } } ] diff --git a/test/ui-test/allTestsSuite.ts b/test/ui-test/allTestsSuite.ts index 89a3f4d95..51b5d63aa 100644 --- a/test/ui-test/allTestsSuite.ts +++ b/test/ui-test/allTestsSuite.ts @@ -3,6 +3,7 @@ import { lightspeedUILoginTest } from "./lightspeedAuthUiTest"; import { lightspeedOneClickTrialUITest } from "./lightspeedOneClickTrialUITest"; import { lightspeedUIAssetsTest } from "./lightspeedUiTest"; import { terminalUITests } from "./terminalUiTest"; +import { walkthroughUiTest } from "./walkthroughUiTest"; describe("VSCode Ansible - UI tests", function () { this.timeout(30000); @@ -18,4 +19,5 @@ describe("VSCode Ansible - UI tests", function () { // lightspeedUILoginTest(); // lightspeedUISignOutTest(); } + walkthroughUiTest(); }); diff --git a/test/ui-test/walkthroughUiTest.ts b/test/ui-test/walkthroughUiTest.ts new file mode 100644 index 000000000..d9206f61b --- /dev/null +++ b/test/ui-test/walkthroughUiTest.ts @@ -0,0 +1,51 @@ +import { config, expect } from "chai"; +import { By, EditorView, Workbench } from "vscode-extension-tester"; +import { sleep } from "./uiTestHelper"; + +config.truncateThreshold = 0; +export function walkthroughUiTest(): void { + describe("Check for the walkthrough - Create an Ansible environment", async () => { + let workbench: Workbench; + let editorView: EditorView; + + before(async () => { + workbench = new Workbench(); + editorView = new EditorView(); + }); + + it("Open the walkthrough and check the elements", async function () { + const commandInput = await workbench.openCommandPrompt(); + await workbench.executeCommand("Welcome: Open Walkthrough"); + await commandInput.setText("Create an Ansible environment"); + await commandInput.confirm(); + + await sleep(1000); + + // Select the editor window + const welcomeTab = await editorView.getTabByTitle("Welcome"); + expect(welcomeTab).is.not.undefined; + + // Locate walkthrough title text + const titleText = await welcomeTab + .findElement( + By.xpath("//div[contains(@class, 'getting-started-category') ]"), + ) + .getText(); + expect( + titleText.includes("Create an Ansible environment"), + "Create an Ansible environment title not found", + ).to.be.true; + + // Locate one of the steps + const stepText = await welcomeTab + .findElement( + By.xpath("//div[contains(@class, 'step-list-container') ]"), + ) + .getText(); + expect( + stepText.includes("Create an Ansible playbook"), + "Create an Ansible playbook step not found", + ).to.be.true; + }); + }); +} From b9a4d6a947c974f4d8cc307511a9421b9b0ab7b4 Mon Sep 17 00:00:00 2001 From: alisonlhart Date: Thu, 3 Oct 2024 15:44:20 -0400 Subject: [PATCH 2/2] Create an Ansible environment walkthrough --- test/ui-test/walkthroughUiTest.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/ui-test/walkthroughUiTest.ts b/test/ui-test/walkthroughUiTest.ts index d9206f61b..9dfbab3b8 100644 --- a/test/ui-test/walkthroughUiTest.ts +++ b/test/ui-test/walkthroughUiTest.ts @@ -42,10 +42,12 @@ export function walkthroughUiTest(): void { By.xpath("//div[contains(@class, 'step-list-container') ]"), ) .getText(); - expect( - stepText.includes("Create an Ansible playbook"), - "Create an Ansible playbook step not found", - ).to.be.true; + + expect(stepText).to.contain.oneOf([ + "Create an Ansible playbook", + "tag in the status bar", + "Install the Ansible environment package", + ]); }); }); }