Skip to content

Commit

Permalink
Added tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lescobar-c1 committed Jun 25, 2024
1 parent f165723 commit 47aa0a4
Show file tree
Hide file tree
Showing 3 changed files with 434 additions and 0 deletions.
314 changes: 314 additions & 0 deletions test/CO-intro1.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,314 @@
require('dotenv').config();
const { test, chromium, expect } = require('@playwright/test');
const { allure } = require('allure-playwright');
const fs = require('fs');


test('CO Intro 1', async () => {
test.info().description = 'Intro to codio 2';
test.setTimeout(360000); // Setting timeout for this specific test

const credentials = JSON.parse(process.env.CREDENTIALS);
const codioEmail = credentials.codioemail;
const codioPass = credentials.codiopass;

const browser = await chromium.launch({
headless: true // Ensure the browser runs in headless mode
});
const context = await browser.newContext();
const page = await context.newPage();


await page.goto('https://codio.com/');
// Assert the current URL to ensure navigation was successful
await expect(page).toHaveURL('https://www.codio.com/');
console.log('CODIO url verified')

const signInButton = page.getByRole('menuitem', { name: 'Sign In' });
await expect(signInButton).toBeVisible(); // Ensure the Sign In button is visible
await signInButton.click();
console.log('Sign in button clicked')


await page.getByPlaceholder('Email or Username').click();
await page.fill('[placeholder="Email or Username"]', codioEmail);
await page.getByPlaceholder('Email or Username').press('Tab');
await page.fill('[placeholder="Password"]', codioPass);
await page.getByPlaceholder('Password').press('Enter');
await page.getByLabel('Got it! dismiss cookie message').click();

await page.getByText('ContQA-Cloud Operations-Test').click();
await page.getByRole('button', { name: 'Introduction to Cloud Part 1' }).click();
console.log('Clicked on Introduction to Cloud Part 1');

// Wait for the role to be ready
const moreOptionsButtons = page.locator('role=button[name="More options"]');

// Ensure there are at least two instances if you want to click the second one
await expect(moreOptionsButtons).toHaveCount(3);
const secondMoreOptionsButton = moreOptionsButtons.nth(1);
await secondMoreOptionsButton.waitFor({ state: 'visible' });

// Click the button
await secondMoreOptionsButton.click();
await page.getByRole('menuitem', { name: 'Login as' }).click();

await page.waitForTimeout(2000);
console.log('Logged in as student');

await page.getByRole('row', { name: 'It Introduction to Cloud Part 1 - Friday, July 21st ready to go' }).locator('div').nth(1).click();
await page.waitForTimeout(2000);
console.log('Navigated to the course');

// Part 1: Checking the page title within the iframe
const guideFrame1 = await page.frameLocator('iframe[name="guides"]');

const pageTitle = await guideFrame1.getByText('1. Introduction to IT');

const box1 = await pageTitle.boundingBox();

const pageWidth1 = await page.viewportSize().width;
const expectedCenter1 = pageWidth1 / 2;
const elementCenter1 = box1.x + box1.width / 2;
const tolerance1 = 50; // Tolerance in pixels

if (Math.abs(elementCenter1 - expectedCenter1) > tolerance1) {
throw new Error(`Element is not centered as expected. Expected center: ${expectedCenter1}, but got: ${elementCenter1}`);
}

await expect(guideFrame1.locator('h1', { hasText: '1. Introduction to IT' })).toHaveText('1. Introduction to IT');

console.log('Page title position and text verified within iframe');

// Part 2: Checking the 'Next' button within the same or different iframe
const guideFrame2 = await page.frameLocator('iframe[name="guides"]');

const nextButton = await guideFrame2.getByRole('button', { name: 'Next' });

const box2 = await nextButton.boundingBox();

const pageWidth2 = await page.viewportSize().width;
const expectedCenter2 = pageWidth2 / 2;
const elementCenter2 = box2.x + box2.width / 2;
const tolerance2 = 50; // Tolerance in pixels

if (Math.abs(elementCenter2 - expectedCenter2) > tolerance2) {
throw new Error(`Element is not centered as expected. Expected center: ${expectedCenter2}, but got: ${elementCenter2}`);
}

console.log('Next button position verified within iframe');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');


const page1Promise = page.waitForEvent('popup');
await page.frameLocator('iframe[name="guides"]').getByRole('link', { name: 'What is a Data Center?' }).click();
const page1 = await page1Promise;

// Check if the heading 'What Is a Data Center?' is present
await expect(page1).toHaveTitle(/What Is a Data Center\?/); // Assert title for extra verification
await expect(page1.locator('h1')).toHaveText('What Is a Data Center?');
console.log('Verified text \'What Is a Data Center?\' is present on the new tab');

// Close the new tab after verification
await page1.close();
console.log('New tab closed');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');


// Locate the iframe where the content is expected
const guideFrame = await page.frameLocator('iframe[name="guides"]');

// Locate the div with the combined CSS selector for class and data-line attribute
const imageContainer = guideFrame.locator('div.codio-md-line.p-tag[data-line="6"]');

// Check if the container has an img tag with the expected source
const image = await imageContainer.locator('img[src=".guides/img/Screenshot 2023-06-30 at 21.43.04.png"]');

// Count the number of such images found
const imageCount = await image.count();

// If there is no image or unexpected content, log an error but continue the test
if (imageCount === 0) {
console.error('Error: Expected image is missing in the specified element within the iframe.');

// Take a screenshot of the current state
const screenshotPath = 'error_screenshot.png';
await page.screenshot({ path: screenshotPath });
console.log('Screenshot taken due to missing image.');

// Attach the screenshot to the Allure report
allure.attachment('Missing Image Screenshot', fs.readFileSync(screenshotPath), 'image/png');

} else {
console.log('Image is correctly placed in the specified element within the iframe.');
}

// Continue with other assertions or operations in the test
console.log('Continuing with further checks...');


await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('textbox').first().click();
await page.waitForTimeout(2000);

await page.frameLocator('iframe[name="guides"]').getByRole('textbox').first().fill('test');
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Submit Answer!' }).first().click();

await page.frameLocator('iframe[name="guides"]').getByRole('textbox').nth(1).click();
await page.waitForTimeout(2000);

await page.frameLocator('iframe[name="guides"]').getByRole('textbox').nth(1).fill('test');
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Submit Answer!' }).first().click();
await page.waitForTimeout(2000);


await page.frameLocator('iframe[name="guides"]').getByRole('textbox').nth(2).click();

await page.frameLocator('iframe[name="guides"]').getByRole('textbox').nth(2).fill('test');
await page.waitForTimeout(2000);

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Submit Answer!' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');
await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);

await page.frameLocator('iframe[name="guides"]').getByRole('textbox').first().click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('textbox').first().fill('test');
await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Submit Answer!' }).first().click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').locator('label').filter({ hasText: 'Under an IaaS model, the' }).locator('i').click();
await page.frameLocator('iframe[name="guides"]').locator('label').filter({ hasText: 'In a PaaS model, the company' }).locator('i').click();
await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Check It! (1 left)' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('textbox').nth(1).click();
await page.frameLocator('iframe[name="guides"]').getByRole('textbox').nth(1).fill('test');
await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Submit Answer!' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Next' }).click();
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.frameLocator('iframe[name="guides"]').getByRole('button', { name: 'Mark as Completed' }).click();
await page.getByPlaceholder('Enter: yes').fill('yes');
await page.getByRole('button', { name: 'Ok' }).click();
console.log('Marked as completed');
await page.waitForTimeout(2000);
console.log('Navigation successful ');

await page.getByText('10').click();
await page.getByRole('button', { name: 'Next question' }).click();
await page.getByText('10').click();
await page.getByRole('button', { name: 'Next question' }).click();
await page.getByPlaceholder('place your answer here...').click();
await page.getByPlaceholder('place your answer here...').fill('test');
await page.getByRole('button', { name: 'Finish' }).click();
console.log('Test completed');

await page.waitForTimeout(2000);
});

test('Reset Course Operations', async ({ }) => {
test.info().description = 'Reset course';
test.setTimeout(360000); // Setting timeout for this specific test

const credentials = JSON.parse(process.env.CREDENTIALS);
const codioEmail = credentials.codioemail;
const codioPass = credentials.codiopass;

const browser = await chromium.launch({
headless: true // Ensure the browser runs in headless mode
});
const context = await browser.newContext();
const page = await context.newPage();

await page.goto('https://codio.com/');
await page.getByRole('menuitem', { name: 'Sign In' }).click();
await page.waitForTimeout(2000);
await page.getByPlaceholder('Email or Username').click();
await page.fill('[placeholder="Email or Username"]', codioEmail);
await page.getByPlaceholder('Email or Username').press('Tab');
await page.fill('[placeholder="Password"]', codioPass);
await page.getByPlaceholder('Password').press('Enter');
await page.getByLabel('Got it! dismiss cookie message').click();
await page.getByRole('link', { name: 'ContQA-Cloud Operations-Test' }).click();
console.log('Resetting course');
await page.waitForTimeout(2000);
await page.getByRole('button', { name: 'Introduction to Cloud Part 1' }).click();
await page.waitForTimeout(2000);
await page.getByRole('button', { name: 'More options' }).nth(1).click();
await page.waitForTimeout(2000);
await page.getByRole('menuitem', { name: 'Reset replay' }).locator('div').click();
await page.waitForTimeout(2000);
console.log('clicked on reset');

await page.waitForTimeout(2000);
// Get the text of the label
const confirmationCodeText = await page.textContent('label.form-confirmationTextInput-label');

// Log the text for debugging purposes
console.log('Confirmation code text:', confirmationCodeText);

// Check if the text contains a number
const matches = confirmationCodeText.match(/\d+/);
if (matches && matches.length > 0) {
const confirmationCode = matches[0];

// Enter the extracted code into the input box
await page.fill('input[name="confirm"]', confirmationCode);
} else {
console.error('No confirmation code found in the text');
}

await page.waitForTimeout(2000);
await page.click('text=Yes');
console.log('Course resetted');
await browser.close();
});



81 changes: 81 additions & 0 deletions test/VM-check.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
require('dotenv').config();
const { test, chromium, expect } = require('@playwright/test');
const { allure } = require('allure-playwright');
const fs = require('fs');

test('CO Intro 1', async () => {
test.info().description = 'Intro to codio 2';
test.setTimeout(360000); // Setting timeout for this specific test

const credentials = JSON.parse(process.env.CREDENTIALS);
const codioEmail = credentials.codioemail;
const codioPass = credentials.codiopass;

const browser = await chromium.launch({
headless: true // Ensure the browser runs in headless mode
});
const context = await browser.newContext();
const page = await context.newPage();


await page.goto('https://codio.com/');
// Assert the current URL to ensure navigation was successful
await expect(page).toHaveURL('https://www.codio.com/');
console.log('CODIO url verified')

const signInButton = page.getByRole('menuitem', { name: 'Sign In' });
await expect(signInButton).toBeVisible(); // Ensure the Sign In button is visible
await signInButton.click();
console.log('Sign in button clicked')


await page.getByPlaceholder('Email or Username').click();
await page.fill('[placeholder="Email or Username"]', codioEmail);
await page.getByPlaceholder('Email or Username').press('Tab');
await page.fill('[placeholder="Password"]', codioPass);
await page.getByPlaceholder('Password').press('Enter');
await page.getByLabel('Got it! dismiss cookie message').click();
await page.getByText('ContQA-Cloud Operations-Test').click();
await page.getByRole('button', { name: 'Introduction to Cloud Part 1' }).click();
console.log('Clicked on Introduction to Cloud Part 1');

// Wait for the role to be ready
const moreOptionsButtons = page.locator('role=button[name="More options"]');

// Ensure there are at least two instances if you want to click the second one
await expect(moreOptionsButtons).toHaveCount(3);
const secondMoreOptionsButton = moreOptionsButtons.nth(1);
await secondMoreOptionsButton.waitFor({ state: 'visible' });

// Click the button
await secondMoreOptionsButton.click();
await page.getByRole('menuitem', { name: 'Login as' }).click();

await page.waitForTimeout(2000);
console.log('Logged in as student');
await page.waitForTimeout(5000);
await page.getByRole('link', { name: 'usergroup Courses' }).click();
await page.getByRole('link', { name: 'Test VM' }).click();
const startTime = Date.now(); // Start time before clicking 'Lesson'
await page.getByRole('cell', { name: 'Lesson' }).click();
console.log('Lesson clicked, starting timer.');

try {
await page.waitForSelector('text=Virtual machine is ready.', { timeout: 60000 });
const endTime = Date.now(); // End time after text appears
const elapsedTime = (endTime - startTime) / 1000; // Calculate elapsed time in seconds

console.log(`The text "Virtual machine is ready." appeared after ${elapsedTime} seconds.`);
} catch (error) {
console.error('The text "Virtual machine is ready." did not appear within the expected time:', error);
}
// Interact with the element within the iframe
try {
const frame = page.frameLocator('#codio-vm-iframes iframe');
await frame.getByTitle('Hide/Show the control bar').click();
console.log('Successfully clicked on "Hide/Show the control bar"');
} catch (error) {
console.error('Failed to interact with "Hide/Show the control bar":', error);
test.fail('Test ended with failure due to inability to interact with the virtual machine.');
}
});
Loading

0 comments on commit 47aa0a4

Please sign in to comment.