001    /**
002     * Copyright 2005-2013 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.krms.impl.ui;
017    
018    import org.junit.Before;
019    import org.junit.Test;
020    import org.kuali.rice.krms.api.repository.agenda.AgendaDefinition;
021    import org.kuali.rice.krms.api.repository.context.ContextDefinition;
022    import org.kuali.rice.krms.api.repository.type.KrmsTypeDefinition;
023    import org.kuali.rice.krms.impl.repository.ActionBoService;
024    import org.kuali.rice.krms.impl.repository.ActionBoServiceImpl;
025    import org.kuali.rice.krms.impl.repository.AgendaBo;
026    import org.kuali.rice.krms.impl.repository.AgendaBoService;
027    import org.kuali.rice.krms.impl.repository.AgendaBoServiceImpl;
028    import org.kuali.rice.krms.impl.repository.ContextBoServiceImpl;
029    import org.kuali.rice.krms.impl.repository.KrmsRepositoryServiceLocator;
030    import org.kuali.rice.krms.impl.repository.PropositionBoService;
031    import org.kuali.rice.krms.impl.repository.PropositionBoServiceImpl;
032    import org.kuali.rice.krms.impl.repository.RuleBoService;
033    import org.kuali.rice.krms.impl.repository.RuleBoServiceImpl;
034    import org.kuali.rice.krms.impl.repository.TermBoService;
035    import org.kuali.rice.krms.impl.repository.TermBoServiceImpl;
036    import org.kuali.rice.krms.test.AbstractBoTest;
037    import org.kuali.rice.test.BaselineTestCase.BaselineMode;
038    import org.kuali.rice.test.BaselineTestCase.Mode;
039    
040    import java.util.Collections;
041    import java.util.HashMap;
042    import java.util.Map;
043    
044    /**
045     * Validation Integration Test
046     * @author Kuali Rice Team (rice.collab@kuali.org)
047     */
048    @BaselineMode(Mode.CLEAR_DB)
049    public class AgendaEditorMaintainableIntegrationTest extends AbstractBoTest {
050    
051        static final String NAMESPACE1 = "AEMIT_KRMS_TEST_1";
052        static final String CONTEXT1 = "AEMIT_Context1";
053    
054        static final String CONTEXT1_QUALIFIER = "Context1Qualifier";
055        static final String CONTEXT1_QUALIFIER_VALUE = "BLAH1";
056        static final String AGENDA1 = "TestAgenda1";
057    
058        private PropositionBoService propositionBoService;
059        private TermBoService termBoService;
060        private AgendaBoService agendaBoService;
061        private RuleBoService ruleBoService;
062        private ActionBoService actionBoService;
063    
064        @Before
065        public void setup() {
066    
067            krmsAttributeDefinitionService = KrmsRepositoryServiceLocator.getKrmsAttributeDefinitionService();
068            krmsTypeRepository = KrmsRepositoryServiceLocator.getKrmsTypeRepositoryService();
069    
070            // like RepositoryCreateAndExecuteIntegrationTest
071            propositionBoService = new PropositionBoServiceImpl();
072            ((PropositionBoServiceImpl)propositionBoService).setBusinessObjectService(getBoService());
073            termBoService = new TermBoServiceImpl();
074            ((TermBoServiceImpl)termBoService).setBusinessObjectService(getBoService());
075            contextRepository = new ContextBoServiceImpl();
076            ((ContextBoServiceImpl)contextRepository).setBusinessObjectService(getBoService());
077            agendaBoService = new AgendaBoServiceImpl();
078            ((AgendaBoServiceImpl)agendaBoService).setBusinessObjectService(getBoService());
079            ((AgendaBoServiceImpl)agendaBoService).setAttributeDefinitionService(krmsAttributeDefinitionService);
080            ruleBoService = new RuleBoServiceImpl();
081            ((RuleBoServiceImpl)ruleBoService).setBusinessObjectService(getBoService());
082            actionBoService = new ActionBoServiceImpl();
083            ((ActionBoServiceImpl)actionBoService).setBusinessObjectService(getBoService());
084        }
085    
086        @Test
087        public void testEmptyAgendaDelete() {
088            ContextDefinition contextDefintion1 = createContextDefinition(NAMESPACE1, CONTEXT1, Collections.singletonMap(
089                    CONTEXT1_QUALIFIER, CONTEXT1_QUALIFIER_VALUE));
090            createAgendaDefinition(AGENDA1, "AgendaLabel", contextDefintion1);
091            AgendaDefinition agendaDefinition = agendaBoService.getAgendaByNameAndContextId(AGENDA1, contextDefintion1.getId());
092    
093            lookupAndSaveDataObject(agendaDefinition);
094        }
095    
096    /*
097       This test requires:
098       1. changing the BaselineMode to (Mode.NONE).
099       2. Setting a breakpoint on the first line.
100       3. Debug the test.
101       4. When you reach the breakpoint, re-impex (and then apply the db test script) your database.
102       5. Continue.  No exceptions should be thrown.
103        @Test
104        public void testDbAgendaItems() {
105            AgendaDefinition agendaDefinition = agendaBoService.getAgendaByNameAndContextId("My Fabulous Agenda", "CONTEXT1"); // values from populated test db
106            lookupAndSaveDataObject(agendaDefinition);
107            agendaDefinition = agendaBoService.getAgendaByNameAndContextId("SimpleAgendaCompoundProp", "CONTEXT1"); // values from populated test db
108            lookupAndSaveDataObject(agendaDefinition);
109            agendaDefinition = agendaBoService.getAgendaByNameAndContextId("One Big Rule", "CONTEXT1"); // values from populated test db
110            lookupAndSaveDataObject(agendaDefinition);
111        }
112    */
113    
114        private void lookupAndSaveDataObject(AgendaDefinition agendaDefinition) {
115            AgendaBo blah = findAgendaByPrimaryKey(agendaDefinition);
116    
117            AgendaEditorMaintainable aem = new AgendaEditorMaintainable();
118            AgendaEditor ae = new AgendaEditor();
119            ae.setAgenda(blah);
120            aem.setDataObject(ae);
121            aem.saveDataObject();
122        }
123    
124        private AgendaBo findAgendaByPrimaryKey(AgendaDefinition agendaDefinition) {Map<String,String>
125                primaryKeys = new HashMap<String, String>();
126            primaryKeys.put("id", agendaDefinition.getId());
127            return getBoService().findByPrimaryKey(AgendaBo.class, primaryKeys);
128        }
129    
130        private void createAgendaDefinition(String agendaName, String agendaLabel, ContextDefinition contextDefinition) {
131            KrmsTypeDefinition krmsGenericTypeDefinition = createKrmsGenericTypeDefinition(contextDefinition.getNamespace(), "testAgendaTypeService", agendaName, agendaLabel);
132    
133            AgendaDefinition agendaDefinition =
134                    AgendaDefinition.Builder.create(null, agendaName, krmsGenericTypeDefinition.getId(), contextDefinition.getId()).build();
135            agendaDefinition = agendaBoService.createAgenda(agendaDefinition);
136            agendaBoService.updateAgenda(agendaDefinition);
137    
138            AgendaBo blah = findAgendaByPrimaryKey(agendaDefinition);
139    
140            AgendaDefinition.Builder agendaDefBuilder1 = AgendaDefinition.Builder.create(agendaBoService.to(blah));
141            agendaDefinition = agendaDefBuilder1.build();
142    
143            agendaBoService.updateAgenda(agendaDefinition);
144        }
145    }