given below is my code for a project, I am currently writing testing reports and scripts for the program. I have wrote some so far but I am dissatisfied. I have 4 forms and I would like 10 test scripts for each form (40 total) given this information rewrite what I did so far with the testing reports and scripts also find my code for reference:



APPLIANCES PROJECT:

Form1.cs(Login Form):
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Data.OleDb;

namespace ApplianceRental
{
    public partial class Form1 : Form
    {
        // Constructor for the Form1 class
        public Form1()
        {
            // Initialize the Form1 UI components
            InitializeComponent();

            // Initialize the database connection and related objects
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_users.mdb");
            OleDbCommand cmd = new OleDbCommand();
            OleDbDataAdapter da = new OleDbDataAdapter();
        }

        // Declare and initialize the database connection and related objects
        OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_users.mdb");
        OleDbCommand cmd = new OleDbCommand();
        OleDbDataAdapter da = new OleDbDataAdapter();

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        // Create a counter variable or class-level property to track failed login attempts
        private int failedAttempts = 0;

        private void button1_Click(object sender, EventArgs e) // Login button
        {
            string username = textBox1.Text;
            string password = textBox2.Text;

            // Check if the maximum login attempts have been reached
            if (failedAttempts >= 3)
            {
                // Inform the user and close the application
                MessageBox.Show("Maximum login attempts reached. Contact the admin.");
                this.Close();
            }

            // Open the database connection
            con.Open();

            // Query to check the user's credentials in the database
            string login = "SELECT * FROM tbl_users WHERE username = '" + textBox1.Text + "' and password= '" + textBox2.Text + "'";
            cmd = new OleDbCommand(login, con);
            OleDbDataReader dr = cmd.ExecuteReader();

            // If the user's credentials are found in the database
            if (dr.Read() == true)
            {
                string userType = dr["User Type"].ToString();
                con.Close();

                // If the user is an admin, open the Admin Dashboard form and hide this form
                if (userType == "Admin")
                {
                    AdminDashboardForm adminDashboardForm = new AdminDashboardForm();
                    adminDashboardForm.Show();
                    this.Hide();
                }
                else // If the user is not an admin, open the Customer Dashboard form and hide this form
                {
                    new CustomerDashboardForm().Show();
                    this.Hide();
                }
            }
            else // If the user's credentials are not found in the database, show an error message and increment the failedAttempts counter
            {
                MessageBox.Show("Invalid username or password! Please try again.");
                failedAttempts++;
            }

            // Close the database connection
            con.Close();
        }

        private void button2_Click(object sender, EventArgs e) // Register button
        {
            // Hide this form and show the RegistrationForm
            this.Hide();
            new RegistrationForm().Show();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e) // Show password checkbox
        {
            // If the "Show password" checkbox is checked
            if (checkBox1.Checked)
            {
                // Remove the password masking character
                textBox2.PasswordChar = '\0';
            }
            else
            {
                // Mask the password with the '' character
                textBox2.PasswordChar = ' ';
            }
        }

        private void Form1_Load_1(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Enter(object sender, EventArgs e)
        {
            pictureBox1.TabStop = false;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
RegistrationForm.cs:
using System;
using System.Linq;
using System.Data.OleDb;
using System.Windows.Forms;

namespace ApplianceRental
{
    public partial class RegistrationForm : Form
    {
        // Declare and initialize a new OleDbConnection object
        private readonly OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_users.mdb");

        public RegistrationForm()
        {
            // Initialize UI components
            InitializeComponent();
        }

        private void Register_Click(object sender, EventArgs e)
        {
            // Check for an empty username box
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("Please enter a username.");
                return;
            }

            // Check for an empty password box
            if (string.IsNullOrEmpty(textBox2.Text))
            {
                MessageBox.Show("Please enter a password.");
                return;
            }

            // Compare password boxes for a match
            if (textBox2.Text != textBox3.Text)
            {
                MessageBox.Show("Passwords do not match.");
                return;
            }

            // Check for an empty full name box
            if (string.IsNullOrEmpty(textBox4.Text))
            {
                MessageBox.Show("Please enter your full name.");
                return;
            }

            // Check for an empty email address box
            if (string.IsNullOrEmpty(textBox5.Text))
            {
                MessageBox.Show("Please enter your email address.");
                return;
            }

            // Check for an empty address box
            if (string.IsNullOrEmpty(textBox6.Text))
            {
                MessageBox.Show("Please enter your address.");
                return;
            }

            // Check for valid password length
            if (textBox2.Text.Length < 8 || textBox2.Text.Length > 16)
            {
                MessageBox.Show("Password must be between 8 and 16 characters.");
                return;
            }

            // Check for presence of both lowercase and uppercase characters
            if (!textBox2.Text.Any(char.IsLower) || !textBox2.Text.Any(char.IsUpper))
            {
                MessageBox.Show("Password must contain at least one lowercase and one uppercase letter.");
                return;
            }

            // Open the database connection
            try
            {
                connection.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error connecting to the database: " + ex.Message);
                return;
            }

            // Insert the user’s registration data into the database
            try
            {
                using (var cmd = new OleDbCommand())
                {
                    cmd.Connection = connection;
                    cmd.CommandText = "INSERT INTO tbl_users(username, [password], fullname, email, address, [User Type]) " +
                    "VALUES(@username, @password, @fullname, @email, @address, ‘Customer’)";

                    cmd.Parameters.AddWithValue("@username", textBox1.Text);
                    cmd.Parameters.AddWithValue("@password", textBox2.Text);
                    cmd.Parameters.AddWithValue("@fullname", textBox4.Text);
                    cmd.Parameters.AddWithValue("@email", textBox5.Text);
                    cmd.Parameters.AddWithValue("@address", textBox6.Text);

                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error inserting data into the database: " + ex.Message);
                return;
            }
            finally
            {
                // Close the database connection
                connection.Close();
            }

            // Inform the user that the registration was successful
            MessageBox.Show("Registration successful!");

            // Clear input fields
            ClearFields();

            // Hide this form and show the main form
            this.Hide();
            new Form1().Show();
        }

        // Clear input fields
        private void ClearFields()
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";
        }

        // Event handlers for text-changed events (placeholders)
        private void textBox1_TextChanged(object sender, EventArgs e) { }
        private void textBox2_TextChanged(object sender, EventArgs e) { }
        private void textBox3_TextChanged(object sender, EventArgs e) { }
        private void textBox4_TextChanged(object sender, EventArgs e) { }
        private void textBox5_TextChanged(object sender, EventArgs e) { }
        private void textBox6_TextChanged(object sender, EventArgs e) { }
    }
}
CustomerDashboardForm:
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace ApplianceRental
{
    public partial class CustomerDashboardForm : Form
    {
        // Create a DataTable to store the items in the shopping cart
        private DataTable cartItems = new DataTable();

        public CustomerDashboardForm()
        {
            // Initialize components
            InitializeComponent();

            // Add columns to the cartItems DataTable
            cartItems.Columns.Add("Appliance");
            cartItems.Columns.Add("PowerUsage");
            cartItems.Columns.Add("TypicalUsage");
            cartItems.Columns.Add("AnnualCost");

            // Set the dataGridViewCart DataSource to the cartItems DataTable
            dataGridViewCart.DataSource = cartItems;
        }

        private void CustomerDashboardForm_Load(object sender, EventArgs e)
        {
            // Loads data into the 'db_usersDataSet.ApplianceDBLIST' table
            this.applianceDBLISTTableAdapter.Fill(this.db_usersDataSet.ApplianceDBLIST);

            BindingSource bindingSource = new BindingSource();
            bindingSource.DataSource = this.db_usersDataSet.ApplianceDBLIST;
            comboBox1.DataSource = bindingSource;
            comboBox1.DisplayMember = "Appliance";
            dataGridView1.DataSource = bindingSource;
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Highlight the selected row in dataGridView1
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (dataGridView1.Rows[i].Cells[0].Value != null)
                {
                    string applianceInGrid = dataGridView1.Rows[i].Cells[0].Value.ToString();
                    string applianceInComboBox = comboBox1.SelectedItem.ToString();

                    if (applianceInGrid == applianceInComboBox)
                    {
                        dataGridView1.ClearSelection();
                        dataGridView1.Rows[i].Selected = true;
                        dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[0];
                        break;
                    }
                }
            }
        }

        // Calculate the total amount in the shopping cart
        private void CalculateTotal()
        {
            decimal totalAmount = 0;

            // Sum up the annual costs for all items in the cart
            foreach (DataRow row in cartItems.Rows)
            {
                totalAmount += Convert.ToDecimal(row["AnnualCost"]);
            }

            // Display the total amount in GBP format
            labelTotalAmount.Text = totalAmount.ToString("C", new System.Globalization.CultureInfo("en-GB"));
        }

        // Add an item to the shopping cart
        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex < 0)
            {
                MessageBox.Show("Please select an appliance to add to the cart.");
            }
            else
            {
                // Get the selected row in dataGridView1
                DataGridViewRow selectedRow = dataGridView1.Rows[comboBox1.SelectedIndex];

                // Create a new row for cartItems
                DataRow newRow = cartItems.NewRow();

                newRow["Appliance"] = selectedRow.Cells[0].Value;
                newRow["PowerUsage"] = selectedRow.Cells[1].Value;
                newRow["TypicalUsage"] = selectedRow.Cells[2].Value;
                newRow["AnnualCost"] = selectedRow.Cells[3].Value;

                // Add newRow to the cartItems
                cartItems.Rows.Add(newRow);

                // Calculate and display the total amount
                CalculateTotal();
            }
        }

        private void searchBox_TextChanged(object sender, EventArgs e)
        {
        }

        // Search for appliances within the dataGridView1
        private void button2_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(searchBox.Text))
            {
                MessageBox.Show("Please enter something to search.");
            }
            else
            {
                DataView dataView = db_usersDataSet.ApplianceDBLIST.DefaultView;
                string searchExpression = Regex.Escape(searchBox.Text.Trim()).Replace("'", "''");
                dataView.RowFilter = string.Format("Appliance LIKE '%{0}%'", searchExpression);
                dataGridView1.DataSource = dataView;
            }
        }

        private void flowLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {
        }

        private void labelTotalAmount_TextChanged(object sender, EventArgs e)
        {
        }
    }
}
AdminDashboardForm.cs:
// This is a C# code for a Windows Form Application.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace ApplianceRental
{
    public partial class AdminDashboardForm : Form
    {
        // Declare class-level variables
        OleDbDataAdapter sda;
        OleDbCommandBuilder scb;
        DataTable dt;
        OleDbConnection con;
        string connectionString = $@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = {Path.Combine(Application.StartupPath, "db_users.mdb")}";
        // Constructor method
        public AdminDashboardForm()
        {
            InitializeComponent();
            // Initialize OleDbConnection object
            con = new OleDbConnection(connectionString);
        }

        // Event handler for the form's loading event
        private void AdminDashboardForm_Load(object sender, EventArgs e)
        {
            
        }

        // Event handler for DataGridView's cell content click 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            
        }

        // Event handler for Save button click event
        private void button1_Click(object sender, EventArgs e)
        {
            string query = "SELECT * FROM ApplianceDBLIST";
            sda = new OleDbDataAdapter(query, con);
            OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(sda);

            dt = new DataTable();
            sda.Fill(dt);
            dataGridView1.DataSource = dt;
        }
        private void saveButton_Click(object sender, EventArgs e)
        {
            // Using block for insert, update and delete commands
            using (OleDbCommand insertCommand = new OleDbCommand("INSERT INTO ApplianceDBLIST ([Appliance], [Power Usage], [Typical Usage], [Estimated Annual Costs]) VALUES (?, ?, ?, ?)", con),
                              updateCommand = new OleDbCommand("UPDATE ApplianceDBLIST SET [Appliance]=?, [Power Usage]=?, [Typical Usage]=?, [Estimated Annual Costs]=? WHERE ID=?", con),
                              deleteCommand = new OleDbCommand("DELETE FROM ApplianceDBLIST WHERE ID=?", con))
            {
                // insert command
                sda.InsertCommand = insertCommand;
                insertCommand.Parameters.Add("@Appliance", OleDbType.VarWChar, 0, "Appliance");
                insertCommand.Parameters.Add("@Power_Usage", OleDbType.VarWChar, 0, "Power Usage");
                insertCommand.Parameters.Add("@Typical_Usage", OleDbType.VarWChar, 0, "Typical Usage");
                insertCommand.Parameters.Add("@Estimated_annual_costs", OleDbType.VarWChar, 0, "Estimated Annual Costs");

                // update command
                sda.UpdateCommand = updateCommand;
                updateCommand.Parameters.Add("@Appliance", OleDbType.VarWChar, 0, "Appliance");
                updateCommand.Parameters.Add("@Power_Usage", OleDbType.VarWChar, 0, "Power Usage");
                updateCommand.Parameters.Add("@Typical_Usage", OleDbType.VarWChar, 0, "Typical Usage");
                updateCommand.Parameters.Add("@Estimated_annual_costs", OleDbType.VarWChar, 0, "Estimated Annual Costs");
                updateCommand.Parameters.Add("@ID", OleDbType.Integer, 0, "ID");
                updateCommand.UpdatedRowSource = UpdateRowSource.None;
                // NOTE: in order to edit you have to manually click on the row enter appropriate data and click on save.

                // delete command
                sda.DeleteCommand = deleteCommand;
                deleteCommand.Parameters.Add("@ID", OleDbType.Integer, 0, "ID");
                deleteCommand.UpdatedRowSource = UpdateRowSource.None;

                // Open the database connection
                con.Open();
                // Update the DataTable with changes made
                sda.Update(dt);
                // Close the database connection
                con.Close();

                // Refresh the data after updating, to display updated data in DataGridView
                dt.Clear();
                sda.Fill(dt);
            }


        }
       
    }
}

Testing scripts & Reports:
Testing Reports

1. Objective: Validate the user registration with valid input data and verify successful registration
Test Steps:
- Open the registration form.
- Enter a valid username, password with appropriate lowercase and uppercase, full name, email address, and address.
- Click the “Register” button.
Expected Result: User should be registered successfully and a “Registration successful!” mes-sage should be displayed.

2. Objective: Validate the user registration with a mismatched password and verify the error message
Test Steps:
- Open the registration form.
- Enter a valid username, different password, and confirm password, full name, email address, and address.
- Click the “Register” button.
Expected Result: User should not be registered, and the error message “Passwords do not match.” should be displayed.

3. Objective: Validate the user registration with a password shorter than 8 characters
Test Steps:
- Open the registration form.
- Enter a valid username, a password shorter than 8 characters, and a matching confirm pass-word, full name, email address, and address.
- Click the “Register” button.
Expected Result: User should not be registered, and the error message “Password must be be-tween 8 and 16 characters.” should be displayed.

4. Objective: Validate the user registration with a password without lowercase or uppercase characters
Test Steps:
- Open the registration form.
- Enter a valid username, a password with no uppercase or lowercase characters, and a match-ing confirm password, full name, email address, and address.
- Click the “Register” button.
Expected Result: User should not be registered, and the error message “Password must contain at least one lowercase and one uppercase letter.” should be displayed.

5. Objective: Verify the appliance search functionality with a valid input
Test Steps:
- Log in to the application with a valid customer account.
- Enter a valid appliance name in the search box.
- Click the search button.
Expected Result: The searched appliance should be displayed in the list.


Testing Scripts

Test Data: { “username”: “kristina92”, “password”: “GhajnTuffieha456”, “confirm password”: “GhajnTuffieha456”, “fullname”: “Kristina Farrugia”, “email”: “<PRESIDIO_ANONYMIZED_EMAIL_ADDRESS>”, “ad-dress”: “Triq l-Għajn, Il-Mosta” }
Expected Result: Registration successful!
Test Data: { “username”: “Anton21”, “password”: “PawluL-Iskandar321”, “confirm password”: “PawluL-Iskandar1234”, “fullname”: “Anton Attard”, “email”: “<PRESIDIO_ANONYMIZED_EMAIL_ADDRESS>”, “ad-dress”: “Triq San Pawl, Tas-Sliema” }
Expected Result: Passwords do not match.
Test Data: { “username”: “CarmelP”, “password”: “Karmenu”, “confirm password”: “Karmenu”, “fullname”: “Carmel Pace”, “email”: “carmel.pace@example.com”, “address”: “25, Triq il-Kappillan, Ħal Tarxien” }
Expected Result: Password must be between 8 and 16 characters.
Test Data: { “username”: “GabriellaBorg”, “password”: “TestPass123”, “confirm password”: “TestPass123”, “fullname”: “Gabriella Borg”, “email”: “gabriella.borg@example.com”, “address”: “17, Triq L-Imdina, L-Isla” }
Expected Result: Password must contain at least one lowercase and one uppercase letter.

Testing Results

Test 1:
- Executed the test script with given test data.
- Registration successful message was displayed.
- The user account was created successfully in the database.












Test 2:
- Executed the test script with given test data.
- Passwords do not match an error message was displayed.
- The account was not created in the database.
 
Test 3:
- Executed the test script with given test data.
- The password must be between 8- and 16-characters error message was displayed.
- The account was not created in the database.
 

Test 4:
- Executed the test script with given test data.
- Password must contain at least one lowercase and one uppercase letter error message was displayed.
- The account was not created in the database.
 


Test 5:
- Executed the test script with given test data.
- Tumble Dryer displayed in the list.
 
Data Selection and Execution Justification
For the test cases, we used different sets of test data that cover various scenarios and ensure that the application handles the inputs as expected. The test data was selected based on the application’s requirements and possible user inputs, ranging from valid to invalid entries.
For user registration, we selected valid input data to verify successful registration, ensuring that the system correctly processes the data and registers a new user. This data set helps us validate that the registration functionality works as intended. Additionally, we tested registration with passwords that are too short, too long, or without the required combination of characters to validate the application’s error handling capabilities.
To verify the appliance search functionality, we selected a valid search term (“Tumble Dryer”) that we expected to match an appliance in the database. This test checks if the application can search and display records based on user input, ensuring that the search functionality works as expected.
To execute the test plan, we followed the steps outlined in each test case using the selected test data. We documented the results based on the system’s response to the inputs and actions, confirming that the application behaves as expected under various conditions.
The methods selected above fall under the broad term “Black Box Testing” where we only pay attention to the inputs and expectations of outputs in the desired program. In this specific c# program we have used Unit Testing as part of “White Box Testing” where a class, method or statement is isolated and tested alone to analyze its output.
The home appliance rental application has been thoroughly tested using the test cases provided, ensuring that it meets both functional and non-functional requirements. The test results show that the application effectively manages user registration, allows customers to search for and rent appliances, while also enabling administrators to manage appliance records.
The selected test data covers a wide range of input scenarios and user behaviors, validating the application’s ability to handle both expected and unexpected situations. While the testing performed provides a high degree of confidence in the application’s quality, it is essential to continue refining and expanding the test cases to keep up with ongoing development and feature enhancement. With a robust test plan in place, the application can continue to evolve and meet user needs in the home appliance rental space.