diff --git a/console/src/app/modules/filter-events/filter-events.component.html b/console/src/app/modules/filter-events/filter-events.component.html index 7f73b8eb1..07deb4d0b 100644 --- a/console/src/app/modules/filter-events/filter-events.component.html +++ b/console/src/app/modules/filter-events/filter-events.component.html @@ -5,6 +5,7 @@ (click)="showFilter = !showFilter" class="cnsl-action-button" #triggereventfilter="cdkOverlayOrigin" + data-e2e="open-filter-button" > {{ 'ACTIONS.FILTER' | translate }} @@ -29,7 +30,7 @@
{{ 'FILTER.TITLE' | translate }} -
@@ -96,6 +97,7 @@ name="eventTypesFilterSet" class="cb" formControlName="eventTypesFilterSet" + data-e2e="event-type-filter-checkbox" >{{ 'IAM.EVENTS.FILTERS.TYPE.CHECKBOX' | translate }} diff --git a/console/src/app/pages/events/events.component.html b/console/src/app/pages/events/events.component.html index 4c0033188..155c42dbe 100644 --- a/console/src/app/pages/events/events.component.html +++ b/console/src/app/pages/events/events.component.html @@ -91,7 +91,7 @@ {{ 'IAM.EVENTS.TYPE' | translate }} - + {{ event.type.localized.localizedMessage }} diff --git a/e2e/cypress/e2e/events/events.cy.ts b/e2e/cypress/e2e/events/events.cy.ts new file mode 100644 index 000000000..65362b612 --- /dev/null +++ b/e2e/cypress/e2e/events/events.cy.ts @@ -0,0 +1,18 @@ +describe('events', () => { + beforeEach(() => { + cy.context().as('ctx'); + }); + + it('events can be filtered', () => { + const eventTypeEnglish = 'Instance added'; + cy.visit('/events'); + cy.get('[data-e2e="event-type-cell"]').should('have.length', 20); + cy.get('[data-e2e="open-filter-button"]').click(); + cy.get('[data-e2e="event-type-filter-checkbox"]').click(); + cy.get('#mat-select-value-1').click(); + cy.contains('mat-option', eventTypeEnglish).click(); + cy.get('body').click(); + cy.get('[data-e2e="filter-finish-button"]').click(); + cy.contains('[data-e2e="event-type-cell"]', eventTypeEnglish).should('have.length.at.least', 1); + }); +}); diff --git a/internal/query/event.go b/internal/query/event.go index 6d238ebab..b54322882 100644 --- a/internal/query/event.go +++ b/internal/query/event.go @@ -34,18 +34,25 @@ func (q *Queries) SearchEvents(ctx context.Context, query *eventstore.SearchQuer return nil, err } + if auditLogRetention != 0 { + events = filterAuditLogRetention(ctx, events, auditLogRetention) + } + + return q.convertEvents(ctx, events), nil +} + +func filterAuditLogRetention(ctx context.Context, events []eventstore.Event, auditLogRetention time.Duration) []eventstore.Event { callTime := call.FromContext(ctx) if callTime.IsZero() { callTime = time.Now() } - for i, event := range events { - if event.CreationDate().Before(callTime.Add(-auditLogRetention)) { - events = events[:i] - break + filteredEvents := make([]eventstore.Event, 0, len(events)) + for _, event := range events { + if event.CreationDate().After(callTime.Add(-auditLogRetention)) { + filteredEvents = append(filteredEvents, event) } } - - return q.convertEvents(ctx, events, auditLogRetention), nil + return filteredEvents } func (q *Queries) SearchEventTypes(ctx context.Context) []string { @@ -56,7 +63,7 @@ func (q *Queries) SearchAggregateTypes(ctx context.Context) []string { return q.eventstore.AggregateTypes() } -func (q *Queries) convertEvents(ctx context.Context, events []eventstore.Event, auditLogRetention time.Duration) []*Event { +func (q *Queries) convertEvents(ctx context.Context, events []eventstore.Event) []*Event { result := make([]*Event, len(events)) users := make(map[string]*EventEditor) for i, event := range events {