src/ldt/ldt/ldt_utils/tests/project_tests.py
changeset 1081 2e086097cb5d
parent 1074 36f657714851
parent 1044 e3902e1bd785
child 1191 b6e0b1811723
equal deleted inserted replaced
1080:09c1d515b562 1081:2e086097cb5d
     3 unittest). These will both pass when you run "manage.py test".
     3 unittest). These will both pass when you run "manage.py test".
     4 
     4 
     5 Replace these with more appropriate tests for your application.
     5 Replace these with more appropriate tests for your application.
     6 """
     6 """
     7 
     7 
     8 from django.test import TestCase
     8 from django.core.management import call_command
     9 from ldt.ldt_utils.models import User, Project
     9 from ldt.ldt_utils.models import User, Project, Content
    10 from ldt.ldt_utils.utils import LdtAnnotation, create_ldt
    10 from ldt.ldt_utils.utils import LdtUtils, LdtAnnotation, create_ldt
    11 from ldt.test.client import Client
    11 from ldt.test.client import Client
       
    12 from ldt.test.testcases import TestCase
       
    13 import lxml.etree
    12 import uuid
    14 import uuid
       
    15 
    13 
    16 
    14 class ProjectTest(TestCase):
    17 class ProjectTest(TestCase):
    15     
    18     
    16     fixtures = ['base_data.json', 'user_data.json']
    19     fixtures = ['base_data.json', 'user_data.json']
    17     
    20     
    18     def setUp(self):
    21     def setUp(self):
    19         self.client = Client()
    22         self.client = Client()
    20         User.objects.create_superuser('blop', 'blop@blop.com', 'blop')
    23         User.objects.create_superuser('blop', 'blop@blop.com', 'blop')
    21         
    24         
    22         _ = self.client.login(username='blop', password='blop')
    25         _ = self.client.login(username='blop', password='blop')
    23         
       
    24         self.user = User()
    26         self.user = User()
    25         self.user.username = 'blop'
    27         self.user.username = 'blop'
       
    28         self.LU = LdtUtils()
       
    29         self.project = Project(title="titleproj1", owner=self.user)
       
    30         self.project.ldt = '<iri ldtversion="1.0.3" xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"><project id="af3b99e4-b695-11df-bfde-00145ea4a2be" user="admin" title="CA:reponse a TC" abstract=""/> <medias> <media extra="" id="laurentcantet_entrelesmurs" pict="" src="http://amateur.iri.centrepompidou.fr//atelier/static/media/ldt/laurentcantet_entrelesmurs/laurentcantet_entrelesmurs.iri" video="rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/"/> </medias> <annotations> <content id="laurentcantet_entrelesmurs"> <ensemble id="ens_perso" idProject="fe0d5d4c-2201-11df-8a24-00145ea4a2be" title="Decoupages personnels" author="perso" abstract=""> <decoupage id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" author="perso"> <title>CA: prof et admin</title> <abstract/> <elements> <element id="s_442AAB3A-42DA-F9BF-75E7-D2A0663FD5FF" begin="985690" dur="373222" author="" date="2010/09/02" color="16711680" src=""> <title/> <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> <decoupage id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" author="perso"> <title>TC: prof et admin</title> <abstract/> <elements> <element id="s_880D9D4B-8BC0-BA43-5ECA-04EBA9FC9E59" begin="2426894" dur="141478" author="" date="2010/02/25" color="10053375" src=""> <title>Conseil de classe</title> <abstract/> <audio source=""/> <tags> <tag>Argumentation</tag> </tags> </element> <element id="s_D568A57C-7110-DED2-3165-04EC54387060" begin="5052858" dur="124407" author="" date="2010/02/25" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> </ensemble> </content> </annotations> <displays> <display id="0" title="Init view" idsel="laurentcantet_entrelesmurs" tc="2426424" zoom="0" scroll="0" infoBAB=""> <audio source=""/> <content id="laurentcantet_entrelesmurs"> <decoupage idens="en_2" id="de_PPP" tagsSelect=""/> <decoupage idens="laurentcantet_entrelesmurs" id="c_14A2E638-1936-97DC-E303-2DBA6A82A8B3" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" tagsSelect=""/> </content> </display> </displays> <edits> <editing id="0" tags=""> <title>Bout a bout 1</title> <abstract/> <edit id="edit1" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> <edit id="edit2" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> </editing> </edits> </iri>'
       
    31         self.project.id = "11321"
       
    32         self.project.ldt_id = str(uuid.uuid1())
       
    33         self.project.description = "proj1description"
       
    34         self.project.save()
    26         
    35         
    27     def test_create_project(self):       
    36     def test_create_project(self):   
       
    37         self.cont1 = Content(iriurl="cont1_id/iriurl1", duration=123)
       
    38         self.cont1.iri_id = "cont1_id"
       
    39         self.cont1.save()
       
    40         
       
    41         self.cont2 = Content(iriurl="cont2_id/iriurl2", duration=100)
       
    42         self.cont2.iri_id = "cont2_id"
       
    43         self.cont2.save()
       
    44         
    28         self.project2 = Project(title="titleproj2", owner=self.user)
    45         self.project2 = Project(title="titleproj2", owner=self.user)
    29         self.project2.ldt = '<iri ldtversion="1.0.3" xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"><project id="af3b99e4-b695-11df-bfde-00145ea4a212" user="admin" title="CA:reponse a TC" abstract=""/> <medias> <media extra="" id="laurentcantet_entrelesmurs" pict="" src="http://amateur.iri.centrepompidou.fr//atelier/static/media/ldt/laurentcantet_entrelesmurs/laurentcantet_entrelesmurs.iri" video="rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/"/> </medias> <annotations> <content id="laurentcantet_entrelesmurs"> <ensemble id="ens_perso" idProject="fe0d5d4c-2201-11df-8a24-00145ea4a2be" title="Decoupages personnels" author="perso" abstract=""> <decoupage id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" author="perso"> <title>CA: prof et admin</title> <abstract/> <elements> <element id="s_442AAB3A-42DA-F9BF-75E7-D2A0663FD5FF" begin="985690" dur="373222" author="" date="2010/09/02" color="16711680" src=""> <title/> <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> <decoupage id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" author="perso"> <title>TC: prof et admin</title> <abstract/> <elements> <element id="s_880D9D4B-8BC0-BA43-5ECA-04EBA9FC9E59" begin="2426894" dur="141478" author="" date="2010/02/25" color="10053375" src=""> <title>Conseil de classe</title> <abstract/> <audio source=""/> <tags> <tag>Argumentation</tag> </tags> </element> <element id="s_D568A57C-7110-DED2-3165-04EC54387060" begin="5052858" dur="124407" author="" date="2010/02/25" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> </ensemble> </content> </annotations> <displays> <display id="0" title="Init view" idsel="laurentcantet_entrelesmurs" tc="2426424" zoom="0" scroll="0" infoBAB=""> <audio source=""/> <content id="laurentcantet_entrelesmurs"> <decoupage idens="en_2" id="de_PPP" tagsSelect=""/> <decoupage idens="laurentcantet_entrelesmurs" id="c_14A2E638-1936-97DC-E303-2DBA6A82A8B3" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" tagsSelect=""/> </content> </display> </displays> <edits> <editing id="0" tags=""> <title>Bout a bout 1</title> <abstract/> <edit id="edit1" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> <edit id="edit2" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> </editing> </edits> </iri>'
    46     
       
    47         self.project2.ldt = self.LU.generate_ldt(Content.objects.all())    
    30         self.project2.ldt_id = str(uuid.uuid1())
    48         self.project2.ldt_id = str(uuid.uuid1())
    31         self.project2.description = "proj2description"
    49         self.project2.description = "proj2description"
    32         self.project2.save()
    50         self.project2.save()
    33         
    51         
    34         self.assertEqual(Project.objects.get(ldt_id=self.project2.ldt_id), self.project2)
    52         self.assertEqual(Project.objects.get(ldt_id=self.project2.ldt_id), self.project2)
    35         
    53         
    36     #test deletion of project without annotation
    54     #test deletion of project without annotation
    37     def test_del_project_v1(self):
    55     def test_del_project_v1(self):
       
    56         self.cont3 = Content(iriurl="cont3_id/iriurl3", duration=100)
       
    57         self.cont3.iri_id = "cont3_id"
       
    58         self.cont3.save()
       
    59         
    38         self.project3 = Project(title="titleproj3", owner=self.user)
    60         self.project3 = Project(title="titleproj3", owner=self.user)
    39         self.project3.ldt = '<iri ldtversion="1.0.3" xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"><project id="af3b99e4-b695-11df-bfde-00145ea4a333" user="admin" title="CA:reponse a TC" abstract=""/> <medias> <media extra="" id="laurentcantet_entrelesmurs" pict="" src="http://amateur.iri.centrepompidou.fr//atelier/static/media/ldt/laurentcantet_entrelesmurs/laurentcantet_entrelesmurs.iri" video="rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/"/> </medias> <annotations> <content id="laurentcantet_entrelesmurs"> <ensemble id="ens_perso" idProject="fe0d5d4c-2201-11df-8a24-00145ea4a2be" title="Decoupages personnels" author="perso" abstract=""> <decoupage id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" author="perso"> <title>CA: prof et admin</title> <abstract/> <elements> <element id="s_442AAB3A-42DA-F9BF-75E7-D2A0663FD5FF" begin="985690" dur="373222" author="" date="2010/09/02" color="16711680" src=""> <title/> <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> <decoupage id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" author="perso"> <title>TC: prof et admin</title> <abstract/> <elements> <element id="s_880D9D4B-8BC0-BA43-5ECA-04EBA9FC9E59" begin="2426894" dur="141478" author="" date="2010/02/25" color="10053375" src=""> <title>Conseil de classe</title> <abstract/> <audio source=""/> <tags> <tag>Argumentation</tag> </tags> </element> <element id="s_D568A57C-7110-DED2-3165-04EC54387060" begin="5052858" dur="124407" author="" date="2010/02/25" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> </ensemble> </content> </annotations> <displays> <display id="0" title="Init view" idsel="laurentcantet_entrelesmurs" tc="2426424" zoom="0" scroll="0" infoBAB=""> <audio source=""/> <content id="laurentcantet_entrelesmurs"> <decoupage idens="en_2" id="de_PPP" tagsSelect=""/> <decoupage idens="laurentcantet_entrelesmurs" id="c_14A2E638-1936-97DC-E303-2DBA6A82A8B3" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" tagsSelect=""/> </content> </display> </displays> <edits> <editing id="0" tags=""> <title>Bout a bout 1</title> <abstract/> <edit id="edit1" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> <edit id="edit2" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> </editing> </edits> </iri>'
    61         self.project3.ldt = self.LU.generate_ldt(Content.objects.all())  
    40         self.project3.id = "333"
    62         self.project3.id = "333"
    41         self.project3.ldt_id = str(uuid.uuid1())
    63         self.project3.ldt_id = str(uuid.uuid1())
    42         self.project3.description = "proj3description"
    64         self.project3.description = "proj3description"
    43         self.project3.save()
    65         self.project3.save()
    44         
    66         
    47         with self.assertRaises(Project.DoesNotExist):
    69         with self.assertRaises(Project.DoesNotExist):
    48             Project.objects.get(ldt_id=self.project3.ldt_id)
    70             Project.objects.get(ldt_id=self.project3.ldt_id)
    49     
    71     
    50     #test deletion of project with annotations  
    72     #test deletion of project with annotations  
    51     def test_del_project_v2(self):
    73     def test_del_project_v2(self):
       
    74         self.cont4 = Content(iriurl="cont4_id/iriurl4", duration=100)
       
    75         self.cont4.iri_id = "cont4_id"
       
    76         self.cont4.save()
    52         
    77         
    53         self.project4 = Project(title="titleproj3", owner=self.user)
    78         self.project4 = Project(title="titleproj4", owner=self.user)
    54         self.project4.ldt = '<iri ldtversion="1.0.3" xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"><project id="af3b99e4-b695-11df-bfde-00145ea4a333" user="admin" title="CA:reponse a TC" abstract=""/> <medias> <media extra="" id="laurentcantet_entrelesmurs" pict="" src="http://amateur.iri.centrepompidou.fr//atelier/static/media/ldt/laurentcantet_entrelesmurs/laurentcantet_entrelesmurs.iri" video="rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/"/> </medias> <annotations> <content id="laurentcantet_entrelesmurs"> <ensemble id="ens_perso" idProject="fe0d5d4c-2201-11df-8a24-00145ea4a2be" title="Decoupages personnels" author="perso" abstract=""> <decoupage id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" author="perso"> <title>CA: prof et admin</title> <abstract/> <elements> <element id="s_442AAB3A-42DA-F9BF-75E7-D2A0663FD5FF" begin="985690" dur="373222" author="" date="2010/09/02" color="16711680" src=""> <title/> <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> <decoupage id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" author="perso"> <title>TC: prof et admin</title> <abstract/> <elements> <element id="s_880D9D4B-8BC0-BA43-5ECA-04EBA9FC9E59" begin="2426894" dur="141478" author="" date="2010/02/25" color="10053375" src=""> <title>Conseil de classe</title> <abstract/> <audio source=""/> <tags> <tag>Argumentation</tag> </tags> </element> <element id="s_D568A57C-7110-DED2-3165-04EC54387060" begin="5052858" dur="124407" author="" date="2010/02/25" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> </ensemble> </content> </annotations> <displays> <display id="0" title="Init view" idsel="laurentcantet_entrelesmurs" tc="2426424" zoom="0" scroll="0" infoBAB=""> <audio source=""/> <content id="laurentcantet_entrelesmurs"> <decoupage idens="en_2" id="de_PPP" tagsSelect=""/> <decoupage idens="laurentcantet_entrelesmurs" id="c_14A2E638-1936-97DC-E303-2DBA6A82A8B3" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" tagsSelect=""/> </content> </display> </displays> <edits> <editing id="0" tags=""> <title>Bout a bout 1</title> <abstract/> <edit id="edit1" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> <edit id="edit2" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> </editing> </edits> </iri>'
    79         self.project4.ldt=self.LU.generate_ldt(Content.objects.all())  
    55         self.project4.id = "444"
    80         self.project4.id = "444"
    56         self.project4.ldt_id = str(uuid.uuid1())
    81         self.project4.ldt_id = str(uuid.uuid1())
    57         self.project4.description = "proj4description"
    82         self.project4.description = "proj4description"
    58         self.project4.save()
    83         self.project4.save()
    59         
    84         
    67         
    92         
    68         self.project4.delete()
    93         self.project4.delete()
    69 
    94 
    70         with self.assertRaises(Project.DoesNotExist):
    95         with self.assertRaises(Project.DoesNotExist):
    71             Project.objects.get(ldt_id=self.project4.ldt_id)
    96             Project.objects.get(ldt_id=self.project4.ldt_id)
       
    97     
       
    98     def test_clean_database_project(self) :
       
    99         self.cont5 = Content(iriurl="cont5_id/iriurl5", duration=123)
       
   100         self.cont5.iri_id = "cont5_id"
       
   101         self.cont5.save()
       
   102         
       
   103         self.cont6 = Content(iriurl="cont6_id/iriurl6", duration=100)
       
   104         self.cont6.iri_id = "cont6_id"
       
   105         self.cont6.save()
       
   106         
       
   107         self.cont7 = Content(iriurl="cont7_id/iriurl7", duration=100)
       
   108         self.cont7.iri_id = "cont7_id"
       
   109         self.cont7.save()
       
   110         
       
   111         self.project.contents.add(self.cont5, self.cont6)
       
   112     
       
   113         doc = self.LU.generate_ldt(Content.objects.all())
       
   114         
       
   115         #project5 : valid project
       
   116         self.project5 = Project(title="titleproj5", owner=self.user)
       
   117         ldt = lxml.etree.tostring(doc, pretty_print = False)
       
   118         self.project5.ldt = ldt
       
   119         self.project5.id = "555"
       
   120         self.project5.ldt_id = str(uuid.uuid1())
       
   121         self.project5.description = "proj5description"
       
   122         self.project5.save()
       
   123         
       
   124         #project6 : project with empty ldt
       
   125         self.project6 = Project(title="titleproj5", owner=self.user)
       
   126         self.project6.id = "666"
       
   127         self.project6.ldt_id = str(uuid.uuid1())
       
   128         self.project6.description = "proj6description"
       
   129         self.project6.save()
       
   130         
       
   131         #project7 : project with a non-existing media
       
   132         
       
   133         self.project7 = Project(title="titleproj7", owner=self.user)
       
   134         self.project7.id = "777"
       
   135         self.project7.ldt_id = str(uuid.uuid1())
       
   136         self.project7.ldt = '<iri><project id="a18ec3de-49c1-11e2-8e5d-00161798aedb" title="" user="IRI Web" abstract=""/><medias><media id="non_existing_media" src="ldt/non_existing_media/non_existing_media_iri_url" video="%(stream_url)s" pict="" extra=""/></medias><annotations/><displays><display id="0" title="generated" idsel="cont5_id" tc="0"><content id="cont5_id"/><content id="cont6_id"/><content id="cont7_id"/></display></displays><edits/></iri>'
       
   137         self.project7.description = "proj7description"
       
   138         self.project7.save()
       
   139         
       
   140         #project8 : project with multiple medias some valid and some that don't exist
       
   141         self.project8 = Project(title="titleproj8", owner=self.user)
       
   142         self.project8.id = "888"
       
   143         self.project8.ldt_id = str(uuid.uuid1())
       
   144         self.project8.ldt = '<iri><project id="a18ec3de-49c1-11e2-8e5d-00161798aedb" title="" user="IRI Web" abstract=""/><medias><media id="cont5_id" src="ldt/cont5_id/iriurl5" video="%(stream_url)s" pict="" extra=""/><media id="non_existing_media" src="ldt/non_existing_media/non_existing_media_iri_url" video="%(stream_url)s" pict="" extra=""/><media id="cont6_id" src="ldt/cont6_id/iriurl6" video="%(stream_url)s" pict="" extra=""/><media id="cont7_id" src="ldt/cont7_id/iriurl7" video="%(stream_url)s" pict="" extra=""/></medias><annotations/><displays><display id="0" title="generated" idsel="cont5_id" tc="0"><content id="cont5_id"/><content id="cont6_id"/><content id="cont7_id"/></display></displays><edits/></iri>'
       
   145         self.project8.description = "proj8description"
       
   146         self.project8.save()
       
   147         
       
   148         #project9 : project without any media
       
   149         self.project9 = Project(title="titleproj9", owner=self.user)
       
   150         self.project9.id = "999"
       
   151         self.project9.ldt_id = str(uuid.uuid1())
       
   152         self.project9.ldt = '<iri><project id="a18ec3de-49c1-11e2-8e5d-00161798aedb" title="" user="IRI Web" abstract=""/><medias></medias><annotations/><displays><display id="0" title="generated" idsel="cont5_id" tc="0"><content id="cont5_id"/><content id="cont6_id"/><content id="cont7_id"/></display></displays><edits/></iri>'
       
   153         self.project9.description = "proj9description"
       
   154         self.project9.save()
       
   155         
       
   156         call_command('set_projectldtiri')
       
   157 
       
   158         with self.assertRaises(Project.DoesNotExist):
       
   159             Project.objects.get(ldt_id=self.project6.ldt_id)
       
   160         
       
   161         with self.assertRaises(Project.DoesNotExist):
       
   162             Project.objects.get(ldt_id=self.project7.ldt_id)
       
   163         
       
   164         with self.assertRaises(Project.DoesNotExist):
       
   165             Project.objects.get(ldt_id=self.project9.ldt_id)
       
   166         
       
   167         self.assertEqual(ldt, self.project5.ldt)    
       
   168