# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2004, 2005, 2006 Nexedi SARL and Contributors.
# All Rights Reserved.
##
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################

import os
import unittest
from AccessControl.SecurityManagement import newSecurityManager
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5.Document.Document import ConversionError

class TestOoodResponse(ERP5TypeTestCase):

  manager_username = 'rie'
  manager_password = 'rie'
  quiet = 1
  run_all_test = 1

  def getTitle(self):
    return "TestOOoBatchMode"

  def login(self):
    uf = self.getPortal().acl_users
    uf._doAddUser(self.manager_username, self.manager_password, ['Manager'], [])
    user = uf.getUserById(self.manager_username).__of__(uf)
    newSecurityManager(None, user)

  def getBusinessTemplateList(self):
    return ('erp5_base',)

  def afterSetUp(self):
    self.login()
    # disable pref that configures the conversion server
    pref = self.getDefaultSystemPreference()
    if pref.getPreferenceState() != 'disabled':
      pref.disable()
    portal_skins = self.getSkinsTool()
    import_file_path = os.path.join(os.path.dirname(__file__),
                                    'test_document',
                                    'REF-en-001.odt')# Any text document will
                                                     # feet our needs
    import_file = open(import_file_path, 'rb')
    custom = portal_skins.custom
    addStyleSheet = custom.manage_addProduct['OFSP'].manage_addFile
    addStyleSheet(id='Base_getODTStyleSheet', file=import_file, title='',
      precondition='', content_type='application/vnd.oasis.opendocument.text')
    addOOoTemplate = custom.manage_addProduct['ERP5OOo'].addOOoTemplate
    addOOoTemplate(id='ERP5Site_viewNothingAsOdt', title='')
    portal_skins.changeSkin(skinname=None)
    ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt
    text = "<office:document-content xmlns:draw='urn:oasis:names:tc:opendocument:xmlns:drawing:1.0' xmlns:office='urn:oasis:names:tc:opendocument:xmlns:office:1.0' xmlns:text='urn:oasis:names:tc:opendocument:xmlns:text:1.0' xmlns:ooo='http://openoffice.org/2004/office' xmlns:number='urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:meta='urn:oasis:names:tc:opendocument:xmlns:meta:1.0' xmlns:table='urn:oasis:names:tc:opendocument:xmlns:table:1.0' xmlns:dr3d='urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0' xmlns:fo='urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0' xmlns:style='urn:oasis:names:tc:opendocument:xmlns:style:1.0' xmlns:xforms='http://www.w3.org/2002/xforms' xmlns:form='urn:oasis:names:tc:opendocument:xmlns:form:1.0' xmlns:script='urn:oasis:names:tc:opendocument:xmlns:script:1.0' xmlns:ooow='http://openoffice.org/2004/writer' xmlns:svg='urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0' xmlns:chart='urn:oasis:names:tc:opendocument:xmlns:chart:1.0' xmlns:dom='http://www.w3.org/2001/xml-events' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:oooc='http://openoffice.org/2004/calc' xmlns:math='http://www.w3.org/1998/Math/MathML'  xmlns:tal='http://xml.zope.org/namespaces/tal'></office:document-content>"
    content_type = 'text/xml'
    ERP5Site_viewNothingAsOdt.pt_edit(text, content_type)

  def test_01_noExcNoFormatNoBatchMode(self):
    request = self.portal.REQUEST
    request.RESPONSE.setHeader('content-type', 'text/html')
    ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt
    ERP5Site_viewNothingAsOdt(batch_mode=0)
    self.assertEqual('application/vnd.oasis.opendocument.text',
        request.RESPONSE.getHeader('content-type').split(';')[0])
    self.assertEqual('attachment; filename="ERP5Site_viewNothingAsOdt.odt"',
        request.RESPONSE.getHeader('content-disposition'))

  def test_01b_noExcEmptyFormatNoBatchMode(self):
    request = self.portal.REQUEST
    request.RESPONSE.setHeader('content-type', 'text/html')
    ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt
    ERP5Site_viewNothingAsOdt(format='', batch_mode=0)
    self.assertEqual('application/vnd.oasis.opendocument.text',
        request.RESPONSE.getHeader('content-type').split(';')[0])
    self.assertEqual('attachment; filename="ERP5Site_viewNothingAsOdt.odt"',
        request.RESPONSE.getHeader('content-disposition'))

  def test_02_noExcNoFormatBatchMode(self):
    request = self.portal.REQUEST
    request.RESPONSE.setHeader('content-type', 'text/html')
    ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt
    ERP5Site_viewNothingAsOdt(batch_mode=1)
    self.assertEqual('text/html',
        request.RESPONSE.getHeader('content-type').split(';')[0])

  def test_03_excPdfFormatNoBatchMode(self):
    request = self.portal.REQUEST
    request.RESPONSE.setHeader('content-type', 'text/html')
    ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt
    # This assumes that a conversion error is raised because oood coordinates
    # are not defined in preferences.
    self.assertRaises(ConversionError, ERP5Site_viewNothingAsOdt,
                      batch_mode=0, format='pdf')
    self.assertEqual('text/html',
        request.RESPONSE.getHeader('content-type').split(';')[0])

  def test_04_excPdfFormatBatchMode(self):
    request = self.portal.REQUEST
    request.RESPONSE.setHeader('content-type', 'text/html')
    ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt
    # This assumes that a conversion error is raised because oood coordinates
    # are not defined in preferences.
    self.assertRaises(ConversionError, ERP5Site_viewNothingAsOdt,
                         batch_mode=1, format='pdf')
    self.assertEqual('text/html', request.RESPONSE.getHeader('content-type').split(';')[0])

def test_suite():
  suite = unittest.TestSuite()
  suite.addTest(unittest.makeSuite(TestOoodResponse))
  return suite