Index: main/waeup.kofa/trunk/src/waeup/kofa/tests/sample_baseconfig_data.csv
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/tests/sample_baseconfig_data.csv	(revision 17787)
+++ main/waeup.kofa/trunk/src/waeup/kofa/tests/sample_baseconfig_data.csv	(revision 17787)
@@ -0,0 +1,2 @@
+acronym,carry_over,current_academic_session,email_admin,email_subject,export_disabled_message,frontpage,maintmode_enabled_by,name,name_admin,next_matric_integer,next_matric_integer_2,next_matric_integer_3,next_matric_integer_4,smtp_mailer,curr_stud_id
+WAeUP.Kofa,0,2011,henrik@waeup.org,Kofa Contact,,Hello World,,Sample University,Administrator,333,0,0,0,No email service,1000412
Index: main/waeup.kofa/trunk/src/waeup/kofa/tests/sample_sessionconfig_data.csv
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/tests/sample_sessionconfig_data.csv	(revision 17787)
+++ main/waeup.kofa/trunk/src/waeup/kofa/tests/sample_sessionconfig_data.csv	(revision 17787)
@@ -0,0 +1,3 @@
+academic_session,booking_fee,clearance_enabled,clearance_fee,coursereg_deadline,late_registration_fee,maint_fee,payment_disabled,transcript_fee,transfer_fee
+2017,300.0,0,222.0,,333.0,0.0,['sf_all'],222.0,0.0
+2019,0.0,0,0.0,,0.0,0.0,[],0.0,0.0
Index: main/waeup.kofa/trunk/src/waeup/kofa/tests/test_configuration.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/tests/test_configuration.py	(revision 17782)
+++ main/waeup.kofa/trunk/src/waeup/kofa/tests/test_configuration.py	(revision 17787)
@@ -30,6 +30,7 @@
 from waeup.kofa.configuration import (
     ConfigurationContainer, SessionConfiguration, SessionConfigurationFactory,
-    ConfigurationContainerExporter, ConfigurationExporter)
-from waeup.kofa.interfaces import(ICSVExporter,
+    ConfigurationContainerExporter, SessionConfigurationExporter,
+    ConfigurationContainerProcessor, SessionConfigurationProcessor)
+from waeup.kofa.interfaces import(ICSVExporter, IBatchProcessor,
     IConfigurationContainer, ISessionConfiguration, ISessionConfigurationAdd)
 
@@ -124,10 +125,10 @@
         result = open(self.outfile, 'rb').read()
         self.assertTrue(
-            'acronym,captcha,carry_over,current_academic_session,email_admin,'
-            'email_subject,export_disabled_message,frontpage,frontpage_dict,'
+            'acronym,carry_over,current_academic_session,email_admin,'
+            'email_subject,export_disabled_message,frontpage,'
             'maintmode_enabled_by,name,name_admin,next_matric_integer,'
             'next_matric_integer_2,next_matric_integer_3,'
             'next_matric_integer_4,smtp_mailer,curr_stud_id\r\n'
-            'WAeUP.Kofa,No captcha,0,,contact@waeup.org,Kofa Contact,,'
+            'WAeUP.Kofa,0,,contact@waeup.org,Kofa Contact,,'
             '"<h1>Welcome to WAeUP.Kofa\n<br>' in result
             )
@@ -138,12 +139,12 @@
     def test_ifaces(self):
         # make sure we fullfill interface contracts
-        obj = ConfigurationExporter()
+        obj = SessionConfigurationExporter()
         verify.verifyObject(ICSVExporter, obj)
-        verify.verifyClass(ICSVExporter, ConfigurationExporter)
+        verify.verifyClass(ICSVExporter, SessionConfigurationExporter)
         return
 
     def test_get_as_utility(self):
         # we can get a faculty exporter as utility
-        result = queryUtility(ICSVExporter, name="configurations")
+        result = queryUtility(ICSVExporter, name="sessionconfigurations")
         self.assertTrue(result is not None)
         return
@@ -154,5 +155,5 @@
         self.sessionconfig.clearance_fee = 3000.6
         self.app['configuration'].addSessionConfiguration(self.sessionconfig)
-        exporter = ConfigurationExporter()
+        exporter = SessionConfigurationExporter()
         exporter.export_all(self.app, self.outfile)
         result = open(self.outfile, 'rb').read()
@@ -164,2 +165,66 @@
             )
         return
+
+BASECONFIG_SAMPLE_DATA = open(
+    os.path.join(os.path.dirname(__file__), 'sample_baseconfig_data.csv'),
+    'rb').read()
+
+BASECONFIG_HEADER_FIELDS = BASECONFIG_SAMPLE_DATA.split(
+    '\n')[0].split(',')
+
+class BaseConfigurationProcessorTests(ConfigurationImportExportSetup):
+
+    layer = FunctionalLayer
+
+    def setUp(self):
+        super(BaseConfigurationProcessorTests, self).setUp()
+        self.processor = ConfigurationContainerProcessor()
+
+    def test_interface(self):
+        # Make sure we fulfill the interface contracts.
+        assert verify.verifyObject(IBatchProcessor, self.processor) is True
+        assert verify.verifyClass(
+            IBatchProcessor, ConfigurationContainerProcessor) is True
+
+    def test_import(self):
+        self.csv_file = os.path.join(
+            self.workdir, 'sample_baseconfig_data.csv')
+        open(self.csv_file, 'wb').write(BASECONFIG_SAMPLE_DATA)
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
+            self.csv_file, BASECONFIG_HEADER_FIELDS,'update')
+        self.assertEqual(num_warns,0)
+        configcontainer = self.processor.getEntry(dict(), self.app)
+        self.assertEqual(configcontainer.frontpage, 'Hello World')
+
+SESSIONCONFIG_SAMPLE_DATA = open(
+    os.path.join(os.path.dirname(__file__), 'sample_sessionconfig_data.csv'),
+    'rb').read()
+
+SESSIONCONFIG_HEADER_FIELDS = SESSIONCONFIG_SAMPLE_DATA.split(
+    '\n')[0].split(',')
+
+class SessionConfigurationProcessorTests(ConfigurationImportExportSetup):
+
+    layer = FunctionalLayer
+
+    def setUp(self):
+        super(SessionConfigurationProcessorTests, self).setUp()
+        self.processor = SessionConfigurationProcessor()
+
+    def test_interface(self):
+        # Make sure we fulfill the interface contracts.
+        assert verify.verifyObject(IBatchProcessor, self.processor) is True
+        assert verify.verifyClass(
+            IBatchProcessor, SessionConfigurationProcessor) is True
+
+    def test_import(self):
+        self.csv_file = os.path.join(
+            self.workdir, 'sample_sessionconfig_data.csv')
+        open(self.csv_file, 'wb').write(SESSIONCONFIG_SAMPLE_DATA)
+        num, num_warns, fin_file, fail_file = self.processor.doImport(
+            self.csv_file, SESSIONCONFIG_HEADER_FIELDS,'create')
+        self.assertEqual(num_warns,0)
+        sessionconfig = self.processor.getEntry({'academic_session':'2017'}, self.app)
+        self.assertEqual(sessionconfig.payment_disabled[0], 'sf_all')
+
+
