Esempio n. 1
0
        public void Die_With_0_Live_Neighbours()
        {
            var neighbours = new Neighbours();
            var cell       = new LiveCell(neighbours);

            var cellState = cell.Tick();

            Assert.That(cellState, Is.TypeOf <DeadCell>());
        }
Esempio n. 2
0
        public void Remain_Live_With_2_Live_Neighbours()
        {
            var neighbours = new Neighbours();

            neighbours.Add(new LiveCell(null));
            neighbours.Add(new LiveCell(null));
            var cell = new LiveCell(neighbours);

            var cellState = cell.Tick();

            Assert.That(cellState, Is.TypeOf <LiveCell>());
        }
Esempio n. 3
0
        public void Die_With_1_Live_Neighbour_And_1_Dead_Neighbour()
        {
            var neighbours = new Neighbours();

            neighbours.Add(new LiveCell(null));
            neighbours.Add(new DeadCell(null));
            var cell = new LiveCell(neighbours);

            var cellState = cell.Tick();

            Assert.That(cellState, Is.TypeOf <DeadCell>());
        }
Esempio n. 4
0
 private static IAmACell[] randomGridCells()
 {
     var rand = new Random();
     var seedCells = new IAmACell[GridWidth*GridHeight];
     for (var x = 0; x < GridWidth; x++)
         for (var y = 0; y < GridHeight; y++)
         {
             if (rand.NextDouble() > 0.5)
                 seedCells[x + GridWidth*y] = new LiveCell(x, y);
             else
                 seedCells[x + GridWidth*y] = new DeadCell(x, y);
         }
     return seedCells;
 }
Esempio n. 5
0
        // TO BE EXECUTED ONLY AFTER ALL users individual spreadsheets gonna get loaded
        internal async Task AssureUsersDataConsistencyAsync(CancellationToken?token = null)
        {
            await Task.Run(() =>
            {
                // Thread safety lock
                lock (this.DashboardDataLock)
                {
                    token.GetValueOrDefault().ThrowIfCancellationRequested();

                    // Get all users
                    IList <User> users = this._dataRepository.UserRepository.ReadAll();

                    // Loop through each user
                    foreach (User user in users)
                    {
                        token.GetValueOrDefault().ThrowIfCancellationRequested();

                        string userSpreadsheetId  = this._dataRepository.UserRepository.GetUserLogSpreadsheetId(user.Username);
                        string userSpreadsheetURL = this.GetUrlFromSpreadsheetId(userSpreadsheetId);

                        // Get all the dashboard rows associated with currently looped through user
                        IList <LiveRow> userAssociateRows = this._dashboardSheet.SheetRows.Where((row) =>
                        {
                            LiveCell usernameCell = row[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserUsername];
                            return(usernameCell.GetDataAsString() == user.Username);
                        }).ToList();

                        // Loop through each user associated rows, compare their user-related content, and update if changes are required.
                        foreach (LiveRow userAssociatedRow in userAssociateRows)
                        {
                            if (userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName].GetDataAsString() != user.FirstName ||
                                userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname].GetDataAsString() != user.Surname ||
                                userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL].GetDataAsString() != userSpreadsheetURL)
                            {
                                userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName].SetData(user.FirstName);
                                userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname].SetData(user.Surname);

                                userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL].SetData(userSpreadsheetURL);
                                userAssociatedRow.Upload(this._dataRepository.GoogleService.SpreadsheetsDb);
                            }
                        }
                    }
                }
            });
        }
Esempio n. 6
0
        private void OnUserSpreadsheetReplaced(object sender, UserSpreadsheetReplacedEventArgs e)
        {
            LiveSpreadsheet userSpreadsheet = e.Spreadsheet;

            LiveSheet metadataSheet = userSpreadsheet[UserRepository.UserLog_Metadata_SheetTitle];

            LiveCell usernameMetadataCell  = metadataSheet[UserRepository.UserLog_Metadata_UsernameValue_RowIndex][UserRepository.UserLog_Metadata_UsernameValue_ColumnIndex];
            LiveCell firstNameMetadataCell = metadataSheet[UserRepository.UserLog_Metadata_FirstNameValue_RowIndex][UserRepository.UserLog_Metadata_FirstNameValue_ColumnIndex];
            LiveCell surnameMetadataCell   = metadataSheet[UserRepository.UserLog_Metadata_SurnameValue_RowIndex][UserRepository.UserLog_Metadata_SurnameValue_ColumnIndex];

            string username           = usernameMetadataCell.GetDataAsString();
            string firstName          = firstNameMetadataCell.GetDataAsString();
            string surname            = firstNameMetadataCell.GetDataAsString();
            string userSpreadsheetId  = this._dataRepository.UserRepository.GetUserLogSpreadsheetId(username);
            string userSpreadsheetURL = this.GetUrlFromSpreadsheetId(userSpreadsheetId);

            // Get all the dashboard rows associated with currently looped through user
            IList <LiveRow> userAssociateRows = this._dashboardSheet.SheetRows.Where((row) =>
            {
                LiveCell usernameCell = row[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserUsername];
                return(usernameCell.GetDataAsString() == username);
            }).ToList();

            // Loop through each user associated rows, compare their user-related content, and update if changes are required.
            foreach (LiveRow userAssociatedRow in userAssociateRows)
            {
                if (userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName].GetDataAsString() != firstName ||
                    userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname].GetDataAsString() != surname ||
                    userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL].GetDataAsString() != userSpreadsheetURL)
                {
                    userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName].SetData(firstName);
                    userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname].SetData(surname);

                    userAssociatedRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL].SetData(userSpreadsheetURL);
                    userAssociatedRow.Upload(this._dataRepository.GoogleService.SpreadsheetsDb);
                }
            }
        }
Esempio n. 7
0
        // Update
        public void UpdateUserDetails(User user)
        {
            // Thread safety lock
            lock (this.DashboardDataLock)
            {
                // Get live spreadsheets database reference.
                LiveSpreadsheetsDb db = this._dataRepository.GoogleService.SpreadsheetsDb;

                // Loop through all the rows in the dashboard
                // Loop through each of the rows (apart from the header row) in the LiveSheet containing saturn 5 database.
                for (int i = 1; i < this._dashboardSheet.RowCount; i++)
                {
                    // Obtain dashboard row located on the currently looped through index...
                    LiveRow dashboardRow = this._dashboardSheet[i];

                    // ... get the cell containing last seen Username for the specific saturn unit located on the dashboard row...
                    LiveCell usernameCell = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserUsername];

                    // ... get the username data from that cell...
                    string dashboardRowUsername = usernameCell.GetDataAsString();

                    // ... and compare provided user Username with dashboard row saturn 5 last seen username,
                    // if they are found being equal, update data in other user related cells.
                    if (user.Username == dashboardRowUsername)
                    {
                        // Boolean flag indicating necessity for updating the changes.
                        bool changesRequired = false;

                        LiveCell firstNameCell          = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserFirstName];
                        LiveCell surnameCell            = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSurname];
                        LiveCell userSpreadsheetURLCell = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_LastSeenUserSpreadsheetURL];
                        LiveCell saturn5StatusCell      = dashboardRow[Saturns5DashboardRepository.Saturns5Dashboard_Status];

                        string currentFirstName      = firstNameCell.GetDataAsString();
                        string currentSurname        = surnameCell.GetDataAsString();
                        string currentSpreadsheetURL = userSpreadsheetURLCell.GetDataAsString();

                        // Obtain status from the dashboard cell associated with the saturn 5
                        // with (according dashboard) the same last user as the one provided for update.
                        Saturn5Status currentStatus = Saturn5StatusService.GetStatusFromDashboardString(saturn5StatusCell.GetDataAsString());

                        if (currentStatus.IsWithUser())
                        {
                            // Get saturn5 status according the type of the user the saturn5 is getting allocated to.
                            Saturn5Status status = user.Type.GetWithUserSaturn5Status();

                            if (currentStatus != status)
                            {
                                changesRequired = true;

                                saturn5StatusCell.SetData(Saturn5StatusService.GetDashboardString(status));
                            }
                        }

                        if (currentFirstName != user.FirstName)
                        {
                            changesRequired = true;

                            firstNameCell.SetData(user.FirstName);
                        }

                        if (currentSurname != user.Surname)
                        {
                            changesRequired = true;

                            surnameCell.SetData(user.Surname);
                        }

                        string userSpreadsheetId = this._dataRepository.UserRepository.GetUserLogSpreadsheetId(dashboardRowUsername);
                        string newSpreadsheetURL = this.GetUrlFromSpreadsheetId(userSpreadsheetId);

                        if (currentSpreadsheetURL != newSpreadsheetURL)
                        {
                            changesRequired = true;

                            userSpreadsheetURLCell.SetData(newSpreadsheetURL);
                        }

                        if (changesRequired)
                        {
                            dashboardRow.Upload(db);
                        }
                    }
                }
            }
        }
Esempio n. 8
0
 public CellShould()
 {
     _cell       = new LiveCell();
     _neighbours = new Neighbours();
 }