diff --git a/easyfinance.client/cypress/e2e/project/detail-project.cy.ts b/easyfinance.client/cypress/e2e/project/detail-project.cy.ts index fa10af57..ed9d8c88 100644 --- a/easyfinance.client/cypress/e2e/project/detail-project.cy.ts +++ b/easyfinance.client/cypress/e2e/project/detail-project.cy.ts @@ -2,6 +2,11 @@ import { attempt } from "cypress/types/bluebird"; import { Expense } from "src/app/core/models/expense"; describe('EconoFlow - project detail Tests', () => { + + beforeEach(() => { + attempts = 0; + }); + it('should copy budget from previous month', () => { cy.fixture('users').then((users) => { const user = users.testUser; @@ -10,18 +15,42 @@ describe('EconoFlow - project detail Tests', () => { cy.intercept('GET', '**/projects*').as('getProjects') cy.intercept('GET', '**/categories*').as('getCategories') - + cy.fixture('projects').then((projects) => { cy.visit('/projects/' + projects.defaultProject.id) findNextMonthWithoutBudget(); cy.get('.btn-primary').contains('Copy Previous Budget').click(); - + cy.wait('@getCategories').then(({ request, response }) => { const exists = response?.body.some(category => category.expenses.some(expense => expense.budget > 0)) expect(exists).to.be.true - }) + }) + }) + }) + }) + + it('copy budget button should not appears when previous month is empty', () => { + cy.fixture('users').then((users) => { + const user = users.testUser; + + cy.login(user.username, user.password) + + cy.intercept('GET', '**/projects*').as('getProjects') + cy.intercept('GET', '**/categories*').as('getCategories') + + cy.fixture('projects').then((projects) => { + cy.visit('/projects/' + projects.defaultProject.id) + + findNextMonthWithoutBudget(); + cy.get('#next').click() + + cy.wait('@getCategories').then(({ request, response }) => { + cy.wait('@getCategories').then(({ request, response }) => { + cy.get('.btn-primary').should('not.exist'); + }); + }); }) }) }) diff --git a/easyfinance.client/src/app/features/project/detail-project/detail-project.component.html b/easyfinance.client/src/app/features/project/detail-project/detail-project.component.html index 66b9b34c..426e6cf6 100644 --- a/easyfinance.client/src/app/features/project/detail-project/detail-project.component.html +++ b/easyfinance.client/src/app/features/project/detail-project/detail-project.component.html @@ -24,7 +24,7 @@

{{ getCurrentDate() | date: 'MMMM'}}

diff --git a/easyfinance.client/src/app/features/project/detail-project/detail-project.component.ts b/easyfinance.client/src/app/features/project/detail-project/detail-project.component.ts index bbae7a4d..2797a5ef 100644 --- a/easyfinance.client/src/app/features/project/detail-project/detail-project.component.ts +++ b/easyfinance.client/src/app/features/project/detail-project/detail-project.component.ts @@ -16,6 +16,7 @@ import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { faArrowUp, faArrowDown } from '@fortawesome/free-solid-svg-icons'; import { ProjectService } from '../../../core/services/project.service'; import { CurrencyFormatPipe } from '../../../core/utils/pipes/currency-format.pipe'; +import { dateUTC } from '../../../core/utils/date'; @Component({ selector: 'app-detail-project', @@ -43,6 +44,7 @@ export class DetailProjectComponent implements OnInit { month: { budget: number, waste: number, remaining: number, earned: number; } = { budget: 0, waste: 0, remaining: 0, earned: 0 }; year: { budget: number, waste: number, remaining: number, earned: number; } = { budget: 0, waste: 0, remaining: 0, earned: 0 }; buttons: string[] = [this.btnIncome, this.btnCategory]; + showCopyPreviousButton = false; constructor(private router: Router, private route: ActivatedRoute, private projectService: ProjectService, private categoryService: CategoryService, private incomeService: IncomeService) { } @@ -72,6 +74,22 @@ export class DetailProjectComponent implements OnInit { this.month.budget = res.map(c => c.getTotalBudget()).reduce((acc, value) => acc + value, 0); this.month.waste = res.map(c => c.getTotalWaste()).reduce((acc, value) => acc + value, 0); this.month.remaining = res.map(c => c.getTotalRemaining()).reduce((acc, value) => acc + value, 0); + + if (this.month.budget === 0) { + var newDate = dateUTC(CurrentDateComponent.currentDate); + newDate.setMonth(CurrentDateComponent.currentDate.getMonth() - 1, 1); + + this.categoryService.get(this.projectId, newDate) + .pipe(map(categories => mapper.mapArray(categories, Category, CategoryDto))) + .subscribe({ + next: res => { + let previousBudget = res.map(c => c.getTotalBudget()).reduce((acc, value) => acc + value, 0); + this.showCopyPreviousButton = previousBudget !== 0; + } + }); + } else { + this.showCopyPreviousButton = false; + } } });