Skip to content
Open
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
9ee4b59
test: add e2e tests for roadmap and case studies page
anushkaaaaaaaa Jul 1, 2025
ec79300
Merge branch 'master' into roadcase
anushkaaaaaaaa Jul 1, 2025
dbd0c2c
Merge branch 'master' into roadcase
anushkaaaaaaaa Jul 9, 2025
7af8822
test: update test files
anushkaaaaaaaa Jul 9, 2025
49eacfa
Merge branch 'master' into roadcase
anushkaaaaaaaa Jul 18, 2025
5b642f4
Merge branch 'master' into roadcase
anushkaaaaaaaa Aug 18, 2025
b37981e
fix: small changes
anushkaaaaaaaa Aug 18, 2025
a259c4c
Merge branch 'roadcase' of https://github.com/anushkaaaaaaaa/website …
anushkaaaaaaaa Aug 18, 2025
2fc8695
Merge branch 'master' into roadcase
anushkaaaaaaaa Sep 3, 2025
cb3cfe1
fix: small change
anushkaaaaaaaa Sep 3, 2025
8a0bbe2
Merge branch 'roadcase' of https://github.com/anushkaaaaaaaa/website …
anushkaaaaaaaa Sep 3, 2025
033fc81
refactor: clean up formatting and improve readability in CaseStudiesP…
anushkaaaaaaaa Nov 7, 2025
1d57bca
refactor: remove unnecessary comments in verifyCardsLink method
anushkaaaaaaaa Nov 7, 2025
3097d8d
refactor: streamline CaseStudiesPage tests by removing unnecessary ho…
anushkaaaaaaaa Nov 7, 2025
adae259
refactor: simplify RoadmapPage tests by removing unnecessary homepage…
anushkaaaaaaaa Nov 7, 2025
3d27683
refactor: remove unnecessary header verification methods from Roadmap…
anushkaaaaaaaa Nov 7, 2025
a2e28a3
refactor: replace header verification with page load verification in …
anushkaaaaaaaa Nov 7, 2025
6c53cbb
refactor: add header verification methods to multiple page classes an…
anushkaaaaaaaa Nov 7, 2025
503c675
refactor: swap header verification with page load verification in Hom…
anushkaaaaaaaa Nov 7, 2025
7af2b72
Merge branch 'master' into roadcase
anushkaaaaaaaa Nov 7, 2025
74ab2b7
refactor: update CaseStudies and Roadmap page tests, improve link ver…
anushkaaaaaaaa Nov 7, 2025
ba10b08
Merge branch 'master' into roadcase
sambhavgupta0705 Nov 16, 2025
9ee7e07
Merge branch 'master' into roadcase
anushkaaaaaaaa Nov 16, 2025
c267ea3
refactor: simplify verifyHeader method in HomePage class
anushkaaaaaaaa Nov 16, 2025
0bd80ae
Merge branch 'master' into roadcase
anushkaaaaaaaa Nov 16, 2025
22a18e3
Merge branch 'master' into roadcase
anushkaaaaaaaa Nov 16, 2025
b93dcfb
Merge branch 'master' into roadcase
anushkaaaaaaaa Nov 17, 2025
102892c
Merge branch 'master' into roadcase
sambhavgupta0705 Nov 19, 2025
672c865
Merge branch 'master' into roadcase
anushkaaaaaaaa Nov 21, 2025
f0648f4
Merge branch 'master' into roadcase
anushkaaaaaaaa Nov 22, 2025
7c6629e
Merge branch 'master' into roadcase
anushkaaaaaaaa Nov 29, 2025
763bbff
Merge branch 'master' into roadcase
anushkaaaaaaaa Dec 15, 2025
07a712d
feat: implement base page classes for documentation, footer, header, …
anushkaaaaaaaa Dec 16, 2025
a6f2fec
Merge branch 'roadcase' of https://github.com/anushkaaaaaaaa/website …
anushkaaaaaaaa Dec 16, 2025
361638e
Merge branch 'master' into roadcase
anushkaaaaaaaa Dec 16, 2025
2e1a42e
refactor: streamline test cases by consolidating repetitive link veri…
anushkaaaaaaaa Dec 16, 2025
a0c9fd0
Merge branch 'roadcase' of https://github.com/anushkaaaaaaaa/website …
anushkaaaaaaaa Dec 16, 2025
20de86f
refactor: remove unnecessary comments from verifyLinks function
anushkaaaaaaaa Dec 16, 2025
4a68464
Merge branch 'master' into roadcase
anushkaaaaaaaa Dec 30, 2025
ec348ce
feat: add Cypress page objects for documentation and tools, and tests…
anushkaaaaaaaa Dec 30, 2025
8408905
Merge branch 'roadcase' of https://github.com/anushkaaaaaaaa/website …
anushkaaaaaaaa Dec 30, 2025
13aa724
test: add e2e tests for roadmap and case studies page
anushkaaaaaaaa Feb 2, 2026
b9f2d1b
merge: resolve conflict with master, update to v3.1.0-explorer
anushkaaaaaaaa Feb 7, 2026
df0819d
fix: update toolspage to use fixtures data instead of config
anushkaaaaaaaa Feb 7, 2026
f9574d3
resolve merge conflicts with master
anushkaaaaaaaa Feb 7, 2026
370b062
fix: rename 'Liquid' to 'AsyncAPI CLI' in tools.json
anushkaaaaaaaa Feb 7, 2026
abf49e7
Update cypress/pages/RoadmapPage.js
anushkaaaaaaaa Feb 7, 2026
b03385d
revert: change 'AsyncAPI CLI' back to 'Liquid' technology tag
anushkaaaaaaaa Feb 8, 2026
b54b0c4
Merge branch 'roadcase' of https://github.com/anushkaaaaaaaa/website …
anushkaaaaaaaa Feb 8, 2026
b72779c
fix: update import path for toolsData to use the correct configuratio…
anushkaaaaaaaa Feb 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions config/tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -866,7 +866,7 @@
"borderColor": "border-[#CA1A33]"
},
{
"name": "Liquid",
"name": "AsyncAPI CLI",
"color": "bg-[#61d0f2]",
"borderColor": "border-[#40ccf7]"
},
Expand Down Expand Up @@ -1556,7 +1556,7 @@
"borderColor": "border-[#CA1A33]"
},
{
"name": "Liquid",
"name": "AsyncAPI CLI",
"color": "bg-[#61d0f2]",
"borderColor": "border-[#40ccf7]"
},
Expand Down
30 changes: 30 additions & 0 deletions cypress/RoadmapPage.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import RoadmapPage from './pages/RoadmapPage';

describe('RoadMap Page Navigation and Functionality', () => {
let roadmapPage;

beforeEach(() => {
roadmapPage = new RoadmapPage();
roadmapPage.visit();
});

it('User navigates to the RoadMap Page and verifies the header', () => {
roadmapPage.verifyPageLoaded();
});

it('User clicks on the community page link and verifies navigation', () => {
roadmapPage.verifyCommunityLink();
});

const tooltips = [
{ name: 'Outcome', index: 0 },
{ name: 'Solution', index: 1 },
{ name: 'Implementation', index: 2 }
];

tooltips.forEach(({ name, index }) => {
it(`User verifies ${name} tooltip`, () => {
roadmapPage.verifyTooltip(index);
});
});
});
42 changes: 42 additions & 0 deletions cypress/casestudies.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import CaseStudiesPage from './pages/CaseStudiesPage';
import { verifyLinks } from './support/helpers';

let casestudiespage;

beforeEach(() => {
casestudiespage = new CaseStudiesPage();
casestudiespage.visit();
});

describe('Critical User Flows in CaseStudies Page', () => {
const verifications = [
{ name: 'header', testName: 'User navigates to the Case Studies Page and verifies the header', fn: () => casestudiespage.verifyHeader() },
{ name: 'FAQ link', testName: 'User verifies FAQ link is visible and contains correct URL', fn: () => casestudiespage.verifyFaqLink() },
{ name: 'Cards link', testName: 'User verifies Cards link is visible and contains correct URL', fn: () => casestudiespage.verifyCardsLink() },
{ name: 'Submit PR link', testName: 'User verifies Submit a Pull Request Link is visible and contains correct URL', fn: () => casestudiespage.verifySubmitPullRequestLink() }
];

verifications.forEach(({ testName, fn }) => {
it(testName, fn);
});
});

describe('Adopters Table', () => {
it('Navigates to the Case Studies page and scrolls down to the Adopters Table', () => {
casestudiespage.verifyScrollDown();
});
});

describe('Links under Resources Section', () => {
let links;

before(() => {
cy.fixture('caseStudiesLinks').then((data) => {
links = data;
});
});

it('Verifies all Links under Resources work', () => {
verifyLinks(links, (href, label) => casestudiespage.verifyResourceLink(href), 'href', 'label');
});
});
28 changes: 14 additions & 14 deletions cypress/docspage.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,22 @@ describe('Docs Page Tests', () => {
docsPage.goToReferenceSection();
docsPage.goToMigrationsSection();
docsPage.goToCommunitySection();
});

it('verifying Card Links present on the Docs Page', () => {
const cards = [
{ href: '/docs/concepts' },
{ href: '/docs/tutorials' },
{ href: '/docs/guides' },
{ href: '/docs/tools' },
{ href: '/docs/reference' },
{ href: '/docs/migration' },
{ href: '/docs/community' },
{ href: '/docs/reference/specification/v3.1.0-explorer' },
];
it('verifying Card Links present on the Docs Page', () => {
const cards = [
{ href: '/docs/concepts' },
{ href: '/docs/tutorials' },
{ href: '/docs/guides' },
{ href: '/docs/tools' },
{ href: '/docs/reference' },
{ href: '/docs/migration' },
{ href: '/docs/community' },
{ href: '/docs/reference/specification/v3.1.0-explorer' },
];

cards.forEach((card) => {
docsPage.verifyCardLinks(card.href);
});
cards.forEach((card) => {
docsPage.verifyCardLinks(card.href);
});
});
});
82 changes: 82 additions & 0 deletions cypress/fixtures/caseStudiesLinks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
[
{
"href": "https://www.youtube.com/watch?v=_MwzLZMwFN8",
"label": "Video: Raiffeisen Bank - GitOps with AsyncAPI"
},
{
"href": "https://www.youtube.com/watch?v=m8I0fYjx6Cc",
"label": "Video: LEGO Group - Documentation as Configuration"
},
{
"href": "https://www.youtube.com/watch?v=qjarcJQVLOg",
"label": "Video: LEGO Group - Cross-Domain Events"
},
{
"href": "https://www.confluent.io/events/kafka-summit-apac-2021/self-service-events-and-decentralised-governance-with-asyncapi-a-real-world/",
"label": "Video: Bank of New Zealand - Self-service Events"
},
{
"href": "https://www.youtube.com/watch?v=yjHgT0n2BtA",
"label": "Video: Zora Robotics - MQTT APIs for IoT"
},
{
"href": "https://www.youtube.com/watch?v=SxTpGRaNIPo",
"label": "Video: Walmart and eBay - AsyncAPI Specification"
},
{
"href": "https://www.youtube.com/watch?v=0_7QZyKLPoE",
"label": "Video: Postman - Synapse Event Infrastructure"
},
{
"href": "https://drive.google.com/file/d/1AVCG9_fFtuOtrvZVZWENmU2aDT7C51Jr/view?usp=sharing",
"label": "Slides: Adobe - AsyncAPI and Modelina"
},
{
"href": "https://www.youtube.com/watch?v=m4KS6FSeTT4",
"label": "Video: Open University of Catalonia - Smart Ports"
},
{
"href": "https://www.youtube.com/watch?v=CGLlxYy66LY",
"label": "Video: Oracle - Data Replication"
},
{
"href": "https://www.asyncapi.com/blog/transfergo-asyncapi-story",
"label": "Article: TransferGo - AsyncAPI Story"
},
{
"href": "https://drive.google.com/file/d/1y67PI8NaITPPwZAiDF2Zs7ISfcIpqMV8/view?usp=sharing",
"label": "Slides: Kuehne+Nagel - GitOps for Kafka"
},
{
"href": "https://adidas.gitbook.io/api-guidelines/asynchronous-api-guidelines/kafka-asynchronous-guidelines/a_introduction/why-asyncapi",
"label": "Docs: Adidas - API Guidelines"
},
{
"href": "https://drive.google.com/file/d/1YzLwQZsMUXGwj_Lsqv-ZnvV2knuowWrS/view?usp=drive_link",
"label": "Slides: Morgan Stanley - WebSocket APIs"
},
{
"href": "https://www.asyncapi.com/casestudies/adeogroup",
"label": "Use Case: Adeo - Documentation Standards"
},
{
"href": "https://www.asyncapi.com/casestudies/hdiglobal",
"label": "Use Case: HDI Global SE - Documentation"
},
{
"href": "https://www.youtube.com/watch?v=KcYiD67gEh0&list=PLbi1gRlP7pig_nA0tRlr0hU_h5sB2HXcq&index=6",
"label": "Video: SAP - Event Catalog"
},
{
"href": "https://www.slideshare.net/slideshow/apidays-paris-2022-adding-a-mock-as-a-service-capability-to-your-api-strategy-portfolio-ludovic-pourrat-lombard-odier/255041645#4",
"label": "Slides: Lombard Odier - Mock as a Service"
},
{
"href": "https://github.com/siemens/rosita",
"label": "Code: Siemens AG - ROS2 Interfaces"
},
{
"href": "https://github.com/pagopa/p4pa-registries/blob/develop/asyncapi/generated.asyncapi.json",
"label": "Code: PagoPA - Event-Driven APIs"
}
]
24 changes: 10 additions & 14 deletions cypress/footer.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,17 @@ describe('Footer Links Validation', () => {
footer.visit();
});

it('verifies the initiative links in the footer', () => {
initiativeLinks.forEach(({ url, label }) => {
footer.verifyFooterLink(url, label);
});
});

it('verifies the social links in the footer', () => {
socialMediaData.forEach(({ url, label }) => {
footer.verifyFooterLink(url, label);
});
});
const linkGroups = [
{ name: 'initiative', links: initiativeLinks },
{ name: 'social', links: socialMediaData },
{ name: 'news', links: newsLinks }
];

it('verifies the news links in the footer', () => {
newsLinks.forEach(({ url, label }) => {
footer.verifyFooterLink(url, label);
linkGroups.forEach(({ name, links }) => {
it(`verifies the ${name} links in the footer`, () => {
links.forEach(({ url, label }) => {
footer.verifyFooterLink(url, label);
});
});
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class BasePage {
visit() {
cy.visit('/');
class BaseDocsPage {
visit(path = '/') {
cy.visit(path);
}

verifyLinkByHref(href) {
Expand All @@ -24,4 +24,4 @@ class BasePage {
}
}

export default BasePage;
export default BaseDocsPage;
4 changes: 2 additions & 2 deletions cypress/pages/BaseFooterPage.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class BasePage {
class BaseFooterPage {
visit() {
cy.visit('/');
}
Expand All @@ -12,4 +12,4 @@ class BasePage {
}
}

export default BasePage;
export default BaseFooterPage;
10 changes: 5 additions & 5 deletions cypress/pages/BaseHeaderPage.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

class BasePage {
visit() {
cy.visit('/')
class BaseHeaderPage {
visit(path = '/') {
cy.visit(path);
return this;
}

getElement(selector) {
Expand All @@ -15,4 +15,4 @@ class BasePage {
}
}

export default BasePage;
export default BaseHeaderPage;
13 changes: 13 additions & 0 deletions cypress/pages/BasePage.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ class BasePage {
return text ? chain.and('contain', text) : chain;
}

getLink(href, text) {
return cy.contains(`a[href="${href}"]`, text)
.should('be.visible')
.and('have.attr', 'href', href);
}

verifyButtonLink(href, buttonText) {
return this.verifyLink(href, buttonText, { findByText: true });
}
Expand All @@ -49,6 +55,13 @@ class BasePage {
.should('not.be.empty');
}

scrollToElement(selector) {
cy.get(selector).scrollIntoView().should('be.visible');
}

scrollToText(text) {
cy.contains(text).scrollIntoView().should('be.visible');
}
}

export default BasePage;
File renamed without changes.
4 changes: 4 additions & 0 deletions cypress/pages/BlogPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ class BlogPage extends BasePage {
verifyPageLoaded() {
this.verifyHeadingExists('Welcome to our blog!');
}

verifyHeader() {
this.verifyPageLoaded();
}
}

export default BlogPage;
40 changes: 40 additions & 0 deletions cypress/pages/CaseStudiesPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,46 @@ class CaseStudiesPage extends BasePage {
verifyPageLoaded() {
this.verifyHeadingExists('Case Studies');
}

verifyScrollDown() {
this.scrollToText('Adopters');
}

verifyCardLink(cardName, cardUrl, index = 0) {
cy.get('[data-testid="CaseStudyCard-main"]')
.eq(index)
.within(() => {
cy.get(`img[alt*="${cardName.split(' ')[0]}"]`).should('exist');
})
.closest('a')
.should('have.attr', 'href', cardUrl);
}

verifyResourceLink(href) {
cy.get(`a[href="${href}"]`)
.first()
.should('exist')
.should('have.attr', 'href', href);
}

verifyFaqLink() {
this.verifyButtonLink(
'https://github.com/asyncapi/website/blob/master/README.md#case-studies',
'FAQ'
);
}

verifySubmitPullRequestLink() {
this.verifyButtonLink(
'https://github.com/asyncapi/website/blob/master/config/usecases.yaml',
'submit a pull request'
);
}

verifyCardsLink() {
this.verifyCardLink('Adeo Group', 'casestudies/adeogroup', 0);
this.verifyCardLink('HDI Global SE', 'casestudies/hdiglobal', 1);
}
}

export default CaseStudiesPage;
Loading
Loading