Skip to content

Latest commit

 

History

History
409 lines (306 loc) · 13.8 KB

File metadata and controls

409 lines (306 loc) · 13.8 KB

Complete Naming Convention Summary

🎯 Project Status: Fully Standardized

All files and folders in the Protractor Page Object Model project now follow industry-standard TypeScript/JavaScript naming conventions.


📁 Folder Naming Conventions

Standard: kebab-case

All folders use lowercase letters with hyphens to separate words.

Current Folder Structure:

Projects/Guru99BankTestAutomation/
├── config/                    ✅ Configuration files
├── contracts/                 ✅ Interface contracts (was: interfaces/)
├── exceptions/                ✅ Custom exceptions
├── exports/                   ✅ Barrel export files
├── log-manager/              ✅ Logging utilities (was: LogManager/)
├── pages/                     ✅ Page Object Model files
│   ├── actions/              ✅ Page action implementations
│   ├── base/                 ✅ Base page classes
│   └── elements/             ✅ Element locators (was: locators/)
├── suites/                    ✅ Test suites
├── test-cases/               ✅ Test specifications (was: TestCases/)
├── test-data/                ✅ Test data files (was: TestData/)
├── test-reports/             ✅ Generated reports (was: TestReports/)
└── utils/                     ✅ Utility classes

Folder Renaming History:

  • Config/config/
  • Exception/exceptions/
  • Exports/exports/
  • Interface/interfaces/contracts/
  • LogManager/log-manager/
  • Pages/pages/
    • Actions/actions/
    • BasePage/base/
    • Locators/locators/elements/
  • Suites/suites/
  • TestCases/test-cases/
  • TestData/test-data/
  • TestReports/test-reports/
  • Utils/utils/

📄 File Naming Conventions

1. Configuration Files: camelCase.ts

Files that export configuration objects or settings.

Examples:

  • config/config.ts (was: Config.ts)
  • log-manager/log4jConfig.ts (was: ConfigLog4j.ts)
  • suites/suites.ts (was: Suites.ts)

Pattern: Lowercase first letter, capitalize subsequent words Use Case: Configuration, settings, and suite definitions


2. Test Data Files: camelCase.ts

Files that export test data objects or constants.

Examples:

  • test-data/testData.ts (was: Data.ts)

Pattern: Lowercase first letter, capitalize subsequent words Use Case: Test data, mock data, constants


3. Test Files: camelCase.spec.ts

Test specification files following Jasmine naming convention.

Examples:

  • test-cases/loginPage.spec.ts (was: LoginPageTest.ts)
  • test-cases/homePage.spec.ts (was: HomePageTest.ts)
  • test-cases/newCustomerPage.spec.ts (was: NewCustomerPageTest.ts)
  • test-cases/editCustomerPage.spec.ts (was: EditCustomerPageTest.ts)
  • test-cases/deleteCustomerPage.spec.ts (was: DeleteCustomerPageTest.ts)

Pattern: featureName.spec.ts Use Case: All test files Reason: .spec.ts is the standard Jasmine/Jest convention


4. Interface Files: camelCase.contract.ts

TypeScript interfaces without the "I" prefix, using .contract.ts suffix.

Examples:

  • contracts/login.contract.ts (was: ILoginPage.ts)
  • contracts/home.contract.ts (was: IHomePage.ts)
  • contracts/newCustomer.contract.ts (was: INewCustomerPage.ts)
  • contracts/editCustomer.contract.ts (was: IEditCustomerPage.ts)
  • contracts/deleteCustomer.contract.ts (was: IDeleteCustomerPage.ts)
  • contracts/testUtil.contract.ts (was: ITestUtil.ts)

Pattern: featureName.contract.ts Use Case: All TypeScript interfaces Reason: Modern TypeScript best practice, clearer file purpose Migration: Removed Hungarian notation "I" prefix


5. Element Locator Files: camelCase.elements.ts

Files containing element locators for pages.

Examples:

  • pages/elements/login.elements.ts (was: LoginPageLocators.ts)
  • pages/elements/home.elements.ts (was: HomePageLocators.ts)
  • pages/elements/newCustomer.elements.ts (was: NewCustomerPageLocators.ts)
  • pages/elements/editCustomer.elements.ts (was: EditCustomerPageLocators.ts)
  • pages/elements/deleteCustomer.elements.ts (was: DeleteCustomerPageLocators.ts)

Pattern: featureName.elements.ts Use Case: Page element locators Reason: More accurate than "locators" (they're Protractor ElementFinders)


6. Page Class Files: camelCase.page.ts

Page Object Model implementation files.

Examples:

  • pages/actions/loginPage.page.ts (was: LoginPage.ts)
  • pages/actions/homePage.page.ts (was: HomePage.ts)
  • pages/actions/newCustomerPage.page.ts (was: NewCustomerPage.ts)
  • pages/actions/editCustomerPage.page.ts (was: EditCustomerPage.ts)
  • pages/actions/deleteCustomerPage.page.ts (was: DeleteCustomerPage.ts)
  • pages/base/basePage.page.ts (was: Page.ts)

Pattern: pageName.page.ts Use Case: All page object classes Reason: Consistent with other suffixes (.spec.ts, .contract.ts, .elements.ts)


7. Utility Class Files: PascalCase.ts

Utility classes that export singleton or static classes.

Examples:

  • utils/PageFactory.ts ✅ (no change needed)
  • utils/TestUtil.ts ✅ (no change needed)
  • log-manager/LogUtils.ts ✅ (no change needed)

Pattern: ClassName.ts (PascalCase) Use Case: Utility classes, helper classes Reason: Classes should use PascalCase per TypeScript/JavaScript standard


8. Exception Class Files: PascalCase.ts

Custom exception classes.

Examples:

  • exceptions/InvalidElementFinder.ts ✅ (class name fixed from InvaildElementFinder)

Pattern: ExceptionName.ts (PascalCase) Use Case: Custom error/exception classes Reason: Classes should use PascalCase per TypeScript/JavaScript standard


9. Export Barrel Files: camelCase.ts

Re-export files that bundle exports from multiple modules.

Examples:

  • exports/interfaces.ts (was: ExportInterface.ts)
  • exports/locators.ts (was: ExportLocators.ts)
  • exports/pages.ts (was: ExportPages.ts)
  • exports/utils.ts (was: ExportUtils.ts)

Pattern: pluralNoun.ts (camelCase, descriptive) Use Case: Barrel/index files for re-exporting Reason: Descriptive names, avoid "Export" prefix (redundant in exports/ folder)


🔄 Complete Renaming History

Phase 1: Typo Fixes (8 Files)

Old Name (Typo) New Name (Fixed)
INewCostumerPage.ts INewCustomerPage.ts
IEditCostumerPage.ts IEditCustomerPage.ts
NewCostumerPage.ts NewCustomerPage.ts
EditCostumerPage.ts EditCustomerPage.ts
NewCostumerPageLocators.ts NewCustomerPageLocators.ts
EditCostumerPageLocators.ts EditCustomerPageLocators.ts
NewCostumerPageTest.ts NewCustomerPageTest.ts
EditCostumerPageTest.ts EditCustomerPageTest.ts

Phase 2: Folder Names (14 Folders)

All folders renamed from PascalCase to kebab-case (see Folder Structure above)

Phase 3: Config & Data Files (4 Files)

Old Name New Name
Config.ts config.ts
ConfigLog4j.ts log4jConfig.ts
Suites.ts suites.ts
Data.ts testData.ts

Phase 4: Test Files (5 Files)

Old Name New Name
LoginPageTest.ts loginPage.spec.ts
HomePageTest.ts homePage.spec.ts
NewCustomerPageTest.ts newCustomerPage.spec.ts
EditCustomerPageTest.ts editCustomerPage.spec.ts
DeleteCustomerPageTest.ts deleteCustomerPage.spec.ts

Phase 5: Export Files (4 Files)

Old Name New Name
ExportInterface.ts interfaces.ts
ExportLocators.ts locators.ts
ExportPages.ts pages.ts
ExportUtils.ts utils.ts

Phase 6: Interface Files (6 Files)

Old Name New Name
ILoginPage.ts login.contract.ts
IHomePage.ts home.contract.ts
INewCustomerPage.ts newCustomer.contract.ts
IEditCustomerPage.ts editCustomer.contract.ts
IDeleteCustomerPage.ts deleteCustomer.contract.ts
ITestUtil.ts testUtil.contract.ts

Folder Rename: interfaces/contracts/

Phase 7: Locator Files (5 Files)

Old Name New Name
LoginPageLocators.ts login.elements.ts
HomePageLocators.ts home.elements.ts
NewCustomerPageLocators.ts newCustomer.elements.ts
EditCustomerPageLocators.ts editCustomer.elements.ts
DeleteCustomerPageLocators.ts deleteCustomer.elements.ts

Folder Rename: pages/locators/pages/elements/

Phase 8: Page Action Files (6 Files)

Old Name New Name
LoginPage.ts loginPage.page.ts
HomePage.ts homePage.page.ts
NewCustomerPage.ts newCustomerPage.page.ts
EditCustomerPage.ts editCustomerPage.page.ts
DeleteCustomerPage.ts deleteCustomerPage.page.ts
Page.ts (base) basePage.page.ts

Bug Fix: InvaildElementFinderInvalidElementFinder (class name)


📊 Statistics

Total Changes

  • Files Renamed: 38 files
  • Folders Renamed: 14 folders
  • Typos Fixed: 8 file names + 1 class name
  • Import Statements Updated: 100+ references
  • Git Commits Created: 10 commits
  • TypeScript Errors: 0 ✅

File Count by Type

  • Test Files (.spec.ts): 5 files
  • Contract Files (.contract.ts): 6 files
  • Element Files (.elements.ts): 5 files
  • Page Files (.page.ts): 6 files
  • Config Files (camelCase.ts): 4 files
  • Export Files (camelCase.ts): 4 files
  • Utility Classes (PascalCase.ts): 3 files
  • Exception Classes (PascalCase.ts): 1 file

✅ Compliance Checklist

Folder Naming

  • All folders use kebab-case
  • Folder names are descriptive and meaningful
  • No PascalCase or camelCase folders remain
  • Folder names accurately reflect their contents

File Naming

  • Test files use .spec.ts suffix
  • Interface files use .contract.ts suffix
  • Element locator files use .elements.ts suffix
  • Page class files use .page.ts suffix
  • Config files use camelCase
  • Utility classes use PascalCase (match class name)
  • No Hungarian notation ("I" prefix) on interfaces
  • File names accurately describe their purpose

Code Quality

  • All imports updated after renames
  • TypeScript compiles without errors
  • No typos in file names or class names
  • Consistent naming across entire project
  • All changes committed to git with descriptive messages

Documentation

  • README.md updated with correct structure
  • CONTRIBUTING.md includes naming conventions
  • PROJECT_IMPROVEMENTS.md documents all changes
  • This summary document created for reference

🎯 Benefits Achieved

For Developers

Immediate file type recognition (via suffixes like .spec.ts, .page.ts) ✅ Faster file navigation (predictable naming patterns) ✅ Reduced cognitive load (consistent conventions) ✅ Better IDE support (standard file types)

For the Project

Industry-standard compliance (TypeScript/JavaScript best practices) ✅ Improved maintainability (clear file organization) ✅ Enhanced collaboration (familiar conventions for new contributors) ✅ Professional appearance (modern naming standards)

For Quality

Zero TypeScript errors (all references updated correctly) ✅ Complete git history (all renames tracked properly) ✅ Comprehensive documentation (this guide and others) ✅ Future-proof structure (follows evolving standards)


📚 Reference Documents

For more details on specific aspects:


🚀 Maintenance

When Adding New Files

Follow these patterns:

File Type Naming Pattern Example
Test featureName.spec.ts checkout.spec.ts
Interface featureName.contract.ts checkout.contract.ts
Elements featureName.elements.ts checkout.elements.ts
Page featureName.page.ts checkoutPage.page.ts
Config configName.ts environment.ts
Utility UtilityName.ts DateHelper.ts
Exception ExceptionName.ts TimeoutError.ts

When Adding New Folders

  • Always use kebab-case: new-feature, api-tests
  • Make names descriptive: Avoid abbreviations
  • Keep structure flat: Avoid deep nesting (max 3-4 levels)

📝 Notes

  1. macOS File System: Case-insensitive but case-preserving. Git properly tracks case-only renames using git mv or manual mv + git add.

  2. Compiled JavaScript: The compiled e2e_tests/ folder reflects all naming changes automatically via TypeScript compilation.

  3. Import Statements: TypeScript can omit .ts extension in imports, but the full file name (including suffix like .page.ts) is recommended for clarity.

  4. Class Names: Class names remain in PascalCase (e.g., LoginPage, HomePage) even though file names are camelCase. This follows TypeScript/JavaScript convention where classes use PascalCase.

  5. Export Statements: When importing, you don't need to specify the class name if it matches the export:

    import { LoginPage } from "../pages/actions/loginPage.page";
    // LoginPage class is exported from loginPage.page.ts

Project Status: 🎉 Fully Standardized and Production Ready

Last Updated: January 16, 2025 Maintained By: Project Contributors Version: 2.0 (Post-Standardization)