Untitled

 avatar
unknown
python
3 years ago
3.4 kB
10
Indexable
import time
import os
from dataclasses import dataclass

from rich.prompt import IntPrompt, Confirm
from rich.console import Console
from typing import List
from rich.progress import track
from ui_automation.scripts.generate_tests.utils.theme import custom_theme
from ui_automation.scripts.generate_tests.utils.types import PromptInputs, FilePathAction

console = Console(theme=custom_theme)



def check_if_file_already_exist(test_name):
    file_path = os.path.join('src', 'automation', test_name)
    if os.path.exists(path=file_path):
        return True
    return False


def ask_test_type():
    tests_types = ['UI Test']
    x = [f'{n}' for n in range(1, len(tests_types))]
    print(x)
    console.print("🧪 What is your test type?", style='question')
    console.print("\n".join([f'({index}) {item}' for index, item in enumerate(tests_types, start=1)]))
    input_message = "Your choice"
    user_input = IntPrompt.ask(input_message, choices=[f'{n}' for n in range(1, len(tests_types) + 1)])
    return user_input


def ask_test_name():
    console.print("🧪 What is your test name? separate by underscore", style='question')
    input_message = 'Your test name: '
    while True:
        user_input = console.input(input_message)
        if not user_input:
            console.print(":face_with_thermometer: [prompt.invalid]Test name is required")
        elif check_if_file_already_exist(user_input):
            console.print(":face_with_thermometer: [prompt.invalid]Test already exist, please choose other name")
        else:
            break
    return user_input


def ask_abstract_class_name(test_name: str):
    abstract_class_name = ''.join(x.title() for x in test_name.split('_'))
    console.print(
        f'🧪 Your abstract class name is [bold #00FFD1]{abstract_class_name}[/], enter a new name or press enter to '
        f'keep the name', style='question')
    user_input = console.input()
    if user_input != '':
        abstract_class_name = user_input
    return abstract_class_name


def ask_approve_files_creation(files_list: List):
    console.print("\n".join([f'[green bold]{x.type.value}[/] [magenta]{x.path}[magenta]' for x in files_list]))
    input_message = "Create test files?:"
    user_input = Confirm.ask(input_message, default=True)
    return user_input


def ask_is_test_flow():
    console.print("🧪 Is your test is part of flow?", style='question')
    user_input = Confirm.ask(default=False)
    return user_input

def ask_is_contains_test_data():
    console.print("🧪 Is your test contains test data?", style='question')
    user_input = Confirm.ask(default=False)
    return user_input



def prompt_message_inputs():
    console.rule("🧪🧪 Test Generator 🧪🧪", style='#E3FDFD')
    test_type = ask_test_type()
    test_name = ask_test_name()
    abstract_class_name = ask_abstract_class_name(test_name)
    is_contains_test_data = ask_is_contains_test_data()
    prompt_inputs = PromptInputs(test_type,test_name,abstract_class_name,is_contains_test_data)
    return prompt_inputs


def show_processing_files_message():
    for i in track(range(3), description="Creating files..."):
        time.sleep(1)  # Simulate work being done


def show_file_action_message(file: FilePathAction):
    console.print(f'✅  {file.type.value} file: [magenta]{file.path}[/]', style='print_file')
Editor is loading...