<commit_before>/*
 * Created on Jul 18, 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.cosylab.acs.alarm;

import alma.acs.component.ComponentLifecycleException;

import com.cosylab.acs.laser.dao.ACSAlarmDAOImpl;
import com.cosylab.acs.laser.dao.ACSCategoryDAOImpl;
import com.cosylab.acs.laser.dao.ConfigurationAccessor;
import com.cosylab.acs.laser.dao.ConfigurationAccessorFactory;


/**
 * @author <NAME>
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class ACSCategoryDAOTest extends AlarmTestBase
{
	private ACSCategoryDAOImpl categoryDAO;
	private ACSAlarmDAOImpl alarmDAO;
	
	public ACSCategoryDAOTest()
	{
		super();
		try	{
			init();
		} catch (Exception e) {
			System.out.println("Failed to init: " + e.toString());
			System.exit(-1);
		}
	}
	
	public void init() throws Exception
	{
		ConfigurationAccessor conf;
		conf = ConfigurationAccessorFactory.getInstance(client.getContainerServices());
		
		alarmDAO=new ACSAlarmDAOImpl(log);
		categoryDAO = new ACSCategoryDAOImpl(log,alarmDAO);
		categoryDAO.setConfAccessor(conf);
	}
		
	public void testFindByCategoryTreeRoot()
	{
		System.out.print("Loading categories ... ");
		try	{
			categoryDAO.loadCategories();
		} catch (Exception e) {
			System.out.println("Failed");
			System.out.println(e.toString());
			return;
		}
		System.out.println("Done");
		
		categoryDAO.setCategoryTreeRoot("ROOT:SOURCE");
		System.out.println("categoryTreeRoot set to ROOT:SOURCE");
		
		System.out.print("Evoking findByCategoryTreeRoot() ... ");
		try {
			categoryDAO.findByCategoryTreeRoot();
		} catch (Exception e) {
			System.out.println("Failed");
			System.out.println(e.toString());
			return;
		}
		System.out.println("Done");
	}
}<commit_msg>Rewritten to test the CategoryDAO<commit_after>/*
 *    ALMA - Atacama Large Millimiter Array
 *    (c) European Southern Observatory, 2002
 *    Copyright by ESO (in the framework of the ALMA collaboration),
 *                 and Cosylab
 *    All rights reserved
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation; either
 *    version 2.1 of the License, or (at your option) any later version.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA 02111-1307  USA
 */
package com.cosylab.acs.alarm;

import alma.acs.component.client.ComponentClientTestCase;

import cern.laser.business.data.Category;
import cern.laser.business.definition.data.CategoryDefinition;

import com.cosylab.acs.laser.dao.ACSAlarmDAOImpl;
import com.cosylab.acs.laser.dao.ACSCategoryDAOImpl;
import com.cosylab.acs.laser.dao.ConfigurationAccessor;
import com.cosylab.acs.laser.dao.ConfigurationAccessorFactory;


/**
 * @author acaproni
 */
public class ACSCategoryDAOTest extends ComponentClientTestCase
{
	private ACSCategoryDAOImpl categoryDAO;
	private ACSAlarmDAOImpl alarmDAO;
	
	public ACSCategoryDAOTest() throws Exception
	{
		super("ACSCategoryDAOTest");
	}
	
	public void setUp() throws Exception
	{
		super.setUp();
		ConfigurationAccessor conf;
		conf = ConfigurationAccessorFactory.getInstance(getContainerServices());
		assertNotNull("Got a null ConfigurationAccessor", conf);
		
		alarmDAO=new ACSAlarmDAOImpl(getContainerServices().getLogger());
		assertNotNull("AlarmDAO is null", alarmDAO);
		categoryDAO = new ACSCategoryDAOImpl(getContainerServices().getLogger(),alarmDAO);
		assertNotNull("category DAO is null", categoryDAO);
		categoryDAO.setConfAccessor(conf);
		
		// Load the categories
		categoryDAO.loadCategories();
	}
	
	// Checks the categories loaded from CDB
	public void testLoadCategory() throws Exception
	{
		Integer[] catIds = categoryDAO.getAllCategoryIDs();
		assertEquals(3, catIds.length);
		
		// Lokk for the ROOT to check the parent ID of the other categories
		Integer rootID=null;
		for (Integer val: catIds) {
			Category cat = categoryDAO.getCategory(val);
			if (cat.getName()=="ROOT") {
				rootID=cat.getCategoryId();
				break;
			}
		}
		assertNotNull("ROOT ID not found", rootID);
		
		// Found checks if both the categories are returned by getCategory
		int found=0;
		for (Integer val: catIds) {
			Category cat = categoryDAO.getCategory(val);
			assertNotNull("Got a null category", cat);
			
			assertEquals(cat.getPath(), cat.getName());

			if (cat.getPath().equals("CATEGORY1")) {
				assertEquals(cat.getDescription(), "Test category 1");
				// Check that parentID is the ROOT ID
				found++;
			} else if (cat.getPath().equals("CATEGORY2")) {
				assertEquals(cat.getDescription(), "Test category 2");
				found++;
			}
		}
		assertEquals(2, found);
	}
	
	/**
	 * Test the getting of categories by their IDs and PATHS
	 */
	public void testGetCategoryByID() throws Exception {
		Integer[] IDs = categoryDAO.getAllCategoryIDs();
		
		// get one category by ID and then get the category from the PATH
		// to check if they are the same category
		for (Integer ID: IDs) {
			Category catID = categoryDAO.getCategory(ID);
			Category catPath = categoryDAO.getCategoryByPath(catID.getPath());
			
			assertEquals(catID,catPath);
		}
	}
	
	/**
	 * Get the ROOT category
	 */
	public void testGetRoot() throws Exception {
		Category root = categoryDAO.getCategoryByPath("ROOT");
		assertNotNull("Found a null ROOT category", root);
		
		// The ROOT has a null parentID
		assertNull("The parentID of ROOT is not null", root.getParentId());
		
		// Check the name and the path
		assertEquals(root.getName(), "ROOT");
		assertEquals(root.getPath(), "ROOT");
		
		// ROOT is not a Leaf
		assertFalse("ROOT is not a leaf", root.isLeaf());
	}
	
	/**
	 * Check that all the categories are child of ROOT
	 */
	public void testRootChilds() throws Exception {
		Category root = categoryDAO.getCategoryByPath("ROOT");
		assertNotNull("Found a null ROOT category", root);
		
		Integer[] IDs = categoryDAO.getAllCategoryIDs();
		for (Integer ID: IDs) {
			Category cat = categoryDAO.getCategory(ID);
			// Skip the ROOT
			if (cat==root) {
				continue;
			}
			assertEquals("The category is not child of ROOT", root.getCategoryId(), cat.getParentId());
			
			assertTrue("The category should be a leaf", cat.isLeaf());
		}
	}
	
	/**
	 * Test the deletion of a category
	 * @throws Exception
	 */
	public void testDeleteCategory() throws Exception {
		Integer[] initialIDs = categoryDAO.getAllCategoryIDs();
		assertNotNull(initialIDs);
		int initialLen=initialIDs.length;
		initialIDs=null;
		
		Category root = categoryDAO.getCategoryByPath("ROOT");
		assertNotNull("Found a null ROOT category", root);
		
		Category catToDelete = categoryDAO.getCategory((root.getCategoryId()+1));
		assertNotNull("Category not found", catToDelete);
		
		// Delete the category
		categoryDAO.deleteCategory(catToDelete);
		
		assertEquals(initialLen-1, categoryDAO.getAllCategoryIDs().length);
		
		// Try to get the deleted CAT
		Category removedCat=categoryDAO.getCategory(catToDelete.getCategoryId());
		assertNull("The category should have been deleted",removedCat);
	}
	
	/**
	 * Test the find all categories
	 */
	public void testFindAllCategories() throws Exception {
		Integer[] IDs = categoryDAO.getAllCategoryIDs();
		assertNotNull(IDs);
		Category[] categories = categoryDAO.findAllCategories();
		assertNotNull(categories);
		
		assertEquals(IDs.length, categories.length);
		
		// Check if each ID is in the categories
		int found = 0;
		for (Integer ID: IDs) {
			for (Category cat: categories) {
				if (cat.getCategoryId()==ID) {
					found++;
				}
			}
		}
		assertEquals(IDs.length, found);
	}
	
	/**
	 * Test findCategory and getCategory
	 * @throws Exception
	 */
	public void testGettingCategories() throws Exception {
		Category root = categoryDAO.getCategoryByPath("ROOT");
		assertNotNull("Found a null ROOT category", root);
		
		assertEquals(categoryDAO.getCategory(root.getCategoryId()), categoryDAO.findCategory(root.getCategoryId()));
		
		// Try to get a non existent Category 
		Category cat = categoryDAO.getCategory(Integer.valueOf(-1));
		assertNull("A category with ID=-1 should not be found by getCategory", cat);
		
		cat=root;
		try {
			cat = categoryDAO.findCategory(Integer.valueOf(-1));
		} catch (Exception e) {
			// We expect to be here as the category does not exist
			cat = null;
		}
		assertNull("A category with ID=-1 should not be found", cat);
	}
	
	/**
	 * Test if getting children works
	 * @throws Exception
	 */
	public void testGetChilds() throws Exception {
		// The root is the only one having childs
		Category root = categoryDAO.getCategoryByPath("ROOT");
		assertNotNull("Found a null ROOT category", root);
		
		Integer[] childs = categoryDAO.getChildren(root.getCategoryId());
		assertNotNull(childs);
		assertEquals(categoryDAO.getAllCategoryIDs().length-1,childs.length);
		
		// Other categories have no children
		Category cat = categoryDAO.getCategory(root.getCategoryId()+1);
		assertNotNull(cat);
		childs = categoryDAO.getChildren(cat.getCategoryId());
		assertNotNull(childs);
		assertEquals(0, childs.length);
		
		// The childs of a non existent ID are null
		assertNull(categoryDAO.getChildren(Integer.valueOf(-1)));
	}
	
	/**
	 * Test if updating a category works
	 */
	public void testUpdateCategory() {
		// The root is the only one having childs
		Category root = categoryDAO.getCategoryByPath("ROOT");
		assertNotNull("Found a null ROOT category", root);
		
		// Get the number of defined categories
		Integer[] IDs = categoryDAO.getAllCategoryIDs();
		int len = IDs.length;
		
		// get a category to update
		Category cat = categoryDAO.getCategory(root.getCategoryId()+1);
		assertNotNull(cat);
		
		CategoryDefinition def = cat.getDefinition();
		assertNotNull(def);
		String newDesc = "New Description";
		def.setDescription(newDesc);
		cat.setDefinition(def);
		
		// Update the category
		categoryDAO.updateCategory(cat);
		
		// Check if the size of the categories is right
		assertEquals(len, categoryDAO.getAllCategoryIDs().length);
		
		// Get the category
		cat = categoryDAO.getCategory(cat.getCategoryId());
		assertNotNull("Category not found", cat);
		
		// Check if the description has been updated
		assertEquals(newDesc, cat.getDescription());
	}
}
{'fraction_non_alphanumeric': 0.10909090909090909, 'fraction_numerical': 0.0042455006922012, 'mean_word_length': 4.021316033364226, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3233120', 'n_tokens_mistral': 3594, 'n_tokens_neox': 3144, 'n_words': 915}