/** 
 | 
 * @file        ADSO-9980 
 | 
 * @description Create event with occurrences 
 | 
 * @author      Pethaperumal Natarajan (Pethaperumal.NATARAJAN.intern@3ds.com) 
 | 
 * @copyright   Dassault Systèmes 
 | 
 */ 
 | 
  
 | 
import { AppMP, Demo, Scenario } from '../../libmp/appmp'; 
 | 
import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const'; 
 | 
import { DataEventCategoryName, DataEventTypeName } from '../../libmp/data/data.calendar'; 
 | 
import { StepList } from '../../libappsop/listsop'; 
 | 
import { GanttChartCommonEvent, ListCommonEvent, ListCommonEventColumn, ListCommonEventOccurrence, ListEventCategory, ListEventCategoryColumn, ListEventCategoryContextMenuItem, ListCommonEventOccurrenceColumn, PanelCommonEventsList } from '../../libmp/forms/commoncalendar'; 
 | 
import { StepGanttChart } from '../../libappsop/ganttchartsop'; 
 | 
import { startOfPlanningYear } from '../../libmp/data/data.period'; 
 | 
import { StepDialog } from '../../libappsop/dialogsop'; 
 | 
import { CalendarEventRepeat, DialogCalendarEvent, PanelCalendarEventFields, StepDialogCalendarEvent, StepPanelRecurrenceWeekly } from '../../libmp/dialogs/calendarevent'; 
 | 
import { ColorList } from '../../libappsop/colorsop'; 
 | 
  
 | 
describe('ADSO-9980 - Create event with occurrences', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  const listEventCategories = appMP.viewCalendar.formCommonCalendar.listEventCategory; 
 | 
  const panelCommonEventsGanttChart = appMP.viewCalendar.formCommonCalendar.pnlCommonEventsGanttChart; 
 | 
  const panelCommonEventsList = appMP.viewCalendar.formCommonCalendar.pnlCommonEventsList; 
 | 
  const gcCommonEvents = panelCommonEventsGanttChart.gcCommonCalendarEvent; 
 | 
  const listCommonEvents = panelCommonEventsList.listCommonEvent; 
 | 
  const dlgCommonEvents = listCommonEvents.dlgCreateEdit; 
 | 
  const listOccurrence = panelCommonEventsList.listCommonEventOccurrence; 
 | 
  
 | 
  const eventName = 'Weekly Maintenance'; 
 | 
  const inputDialogEvents: PanelCalendarEventFields = { 
 | 
    Name: eventName, 
 | 
    Description: 'Machine unavailable due to maintenance.', 
 | 
    Type: DataEventTypeName.Unavailable, 
 | 
    ApplyToNewResources: 'true', 
 | 
    StartDate: `03-Jan-${startOfPlanningYear}`, 
 | 
    IsAllDay: 'true', 
 | 
    // TODO: https://jira.delmia.dsone.3ds.com/browse/CTQC-4779. Work around for the bug where the year changes into a random value upon selecting "all day". 
 | 
    EndDate: `04-Jan-${startOfPlanningYear}`, 
 | 
  }; 
 | 
  
 | 
  const startDate1 = new Date(`03-Jan-${startOfPlanningYear}`); 
 | 
  const endDate1 = new Date(`04-Jan-${startOfPlanningYear}`); 
 | 
  const startDate2 = new Date(`10-Jan-${startOfPlanningYear}`); 
 | 
  const endDate2 = new Date(`11-Jan-${startOfPlanningYear}`); 
 | 
  const startDate3 = new Date(`17-Jan-${startOfPlanningYear}`); 
 | 
  const endDate3 = new Date(`18-Jan-${startOfPlanningYear}`); 
 | 
  
 | 
  const inputPanelReccurenceWeekly: PanelCalendarEventFields = { 
 | 
    RecurWeeklyRepeatEvery: '1', 
 | 
    RecurWeeklyEndBy: 'true', 
 | 
    RecurWeeklyEndByDate: `17-Jan-${startOfPlanningYear}`, 
 | 
  }; 
 | 
  const repeatOnDays: number[] = [startDate1.getDay()]; 
 | 
  
 | 
  const itemUnavailableListCategory: ListEventCategoryColumn = { Name: DataEventCategoryName.Unavailable }; 
 | 
  
 | 
  const rowListCommonCalendar: ListCommonEventColumn = { Name: eventName, NrOfOccurrences: '3' }; 
 | 
  const parentListCommonCalendar: ListCommonEventColumn[] = [{ Category: DataEventCategoryName.Unavailable }]; 
 | 
  
 | 
  const rowOccurrenceList1: ListCommonEventOccurrenceColumn = { Start: `3-Jan-${startOfPlanningYear}`, End: `4-Jan-${startOfPlanningYear}` }; 
 | 
  const rowOccurrenceList2: ListCommonEventOccurrenceColumn = { Start: `10-Jan-${startOfPlanningYear}`, End: `11-Jan-${startOfPlanningYear}` }; 
 | 
  const rowOccurrenceList3: ListCommonEventOccurrenceColumn = { Start: `17-Jan-${startOfPlanningYear}`, End: `18-Jan-${startOfPlanningYear}` }; 
 | 
  
 | 
  beforeAll(async () => { 
 | 
    jasmine.addMatchers(qCustomMatcher); 
 | 
    await appMP.login(); 
 | 
  }); 
 | 
  
 | 
  afterAll(async () => { 
 | 
    await appMP.resetActiveView(appMP.viewCalendar); 
 | 
    await appMP.cleanupAndLogout(); 
 | 
  }); 
 | 
  
 | 
  afterEach(async () => { 
 | 
    await appMP.checkToastMessage(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 1 - ${AppMP.getDemoDataPath(Demo.Food, Scenario.Base)}`, async () => { 
 | 
    await appMP.createDemoDataset(Demo.Food, Scenario.Base, false); 
 | 
  }); 
 | 
  
 | 
  it(`Step 2 - Open view ${appMP.viewCalendar.viewPath}.`, async () => { 
 | 
    await appMP.viewCalendar.switchTo(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 3 - ${StepList.selectRowAndClickMenu(ListEventCategory.title, itemUnavailableListCategory, ListEventCategoryContextMenuItem.CreateEvent.Label)}`, async () => { 
 | 
    const row = await listEventCategories.getRow(itemUnavailableListCategory); 
 | 
    await listEventCategories.selectContextMenu(ListEventCategoryContextMenuItem.CreateEvent, row); 
 | 
  }); 
 | 
  
 | 
  it(`Step 4 - ${StepDialog.updateDialogValues(DialogCalendarEvent.title, inputDialogEvents)}`, async () => { 
 | 
    await dlgCommonEvents.updateDialogValues(inputDialogEvents); 
 | 
  }); 
 | 
  
 | 
  it(`Step 5 - ${StepDialogCalendarEvent.setEventRepeat(CalendarEventRepeat.Weekly)}`, async () => { 
 | 
    await dlgCommonEvents.setEventRepeat(CalendarEventRepeat.Weekly); 
 | 
  }); 
 | 
  
 | 
  it(`Step 6 - ${StepDialogCalendarEvent.clickCustomizeRepetition()}`, async () => { 
 | 
    await dlgCommonEvents.clickCustomizeRepetition(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 7 - ${StepDialog.updateDialogValues(DialogCalendarEvent.title, inputPanelReccurenceWeekly)}`, async () => { 
 | 
    await dlgCommonEvents.updateDialogValues(inputPanelReccurenceWeekly); 
 | 
  }); 
 | 
  
 | 
  it(`Step 8 - ${StepPanelRecurrenceWeekly.setRepeatWeeklyOnDays(repeatOnDays)}`, async () => { 
 | 
    await dlgCommonEvents.pnlRecurrenceWeekly.setRepeatWeeklyOnDays(repeatOnDays); 
 | 
  }); 
 | 
  
 | 
  it(`Step 9 - ${StepDialog.clickOK()}`, async () => { 
 | 
    await dlgCommonEvents.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 10 - ${StepGanttChart.ensureVisible(GanttChartCommonEvent.title, startDate1.toDateString())} ${StepGanttChart.verifyNodeExists(GanttChartCommonEvent.title, eventName, startDate1, endDate1, ColorList.gray().Color)}`, async () => { 
 | 
    await gcCommonEvents.ensureVisible(startDate1); 
 | 
    await gcCommonEvents.verifyNodeExists(eventName, startDate1, endDate1, ColorList.gray()); 
 | 
  }); 
 | 
  
 | 
  it(`Step 11 - ${StepGanttChart.ensureVisible(GanttChartCommonEvent.title, startDate2.toDateString())} ${StepGanttChart.verifyNodeExists(GanttChartCommonEvent.title, eventName, startDate2, endDate2, ColorList.gray().Color)}`, async () => { 
 | 
    await gcCommonEvents.ensureVisible(startDate2); 
 | 
    await gcCommonEvents.verifyNodeExists(eventName, startDate2, endDate2, ColorList.gray()); 
 | 
  }); 
 | 
  
 | 
  it(`Step 12 - ${StepGanttChart.ensureVisible(GanttChartCommonEvent.title, startDate3.toDateString())} ${StepGanttChart.verifyNodeExists(GanttChartCommonEvent.title, eventName, startDate3, endDate3, ColorList.gray().Color)}`, async () => { 
 | 
    await gcCommonEvents.ensureVisible(startDate3); 
 | 
    await gcCommonEvents.verifyNodeExists(eventName, startDate3, endDate3, ColorList.gray()); 
 | 
  }); 
 | 
  
 | 
  it(`Step 13 - ${StepDialog.clickTab(PanelCommonEventsList.title)}`, async () => { 
 | 
    await panelCommonEventsList.clickTab(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 14 - ${StepList.verifyRowExists(ListCommonEvent.title, rowListCommonCalendar, parentListCommonCalendar)}`, async () => { 
 | 
    await listCommonEvents.verifyRowExists(rowListCommonCalendar, parentListCommonCalendar); 
 | 
  }); 
 | 
  
 | 
  it(`Step 15 - ${StepList.selectRow(ListCommonEvent.title, rowListCommonCalendar)}`, async () => { 
 | 
    await listCommonEvents.selectRow(rowListCommonCalendar); 
 | 
  }); 
 | 
  
 | 
  it(`Step 16 - ${StepList.verifyRowExists(ListCommonEventOccurrence.title, rowOccurrenceList1)} ${StepList.verifyRowExists(ListCommonEventOccurrence.title, rowOccurrenceList2)} ${StepList.verifyRowExists(ListCommonEventOccurrence.title, rowOccurrenceList3)}`, async () => { 
 | 
    await listOccurrence.verifyRowExists(rowOccurrenceList1); 
 | 
    await listOccurrence.verifyRowExists(rowOccurrenceList2); 
 | 
    await listOccurrence.verifyRowExists(rowOccurrenceList3); 
 | 
  }); 
 | 
}); 
 |