ó
ù2¢\c           @  s9  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l m Z d d l m	 Z	 d d l
 m Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z d d l m Z d d l m Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d S(   s   Tests for the notebook manager.iÿÿÿÿ(   t   print_functionN(   t   contextmanager(   t   combinations(   t   SkipTest(   t	   HTTPError(   t   TestCase(   t   NamedTemporaryFile(   t   v4(   t   TemporaryDirectory(   t
   TraitError(   t
   decoratorsi   (   t   FileContentsManagerc         C  sF   |  j  | ƒ } y t j | ƒ Wn t k
 rA t d | ƒ n Xd S(   s   
    Make a directory.
    s   Directory already exists: %rN(   t   _get_os_patht   ost   makedirst   OSErrort   print(   t   contents_managert   api_patht   os_path(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt	   _make_dir   s
    t   TestFileContentsManagerc           B  sÊ   e  Z e d d  „ ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e j e j d k os e j d d	 k  ƒ d
 „  ƒ Z e j e j d k o§ e j d d	 k  ƒ d „  ƒ Z d „  Z d „  Z RS(   c         c  sS   | p d | } y	 d  VWn& t  k
 rA } |  j | j | ƒ n X|  j | ƒ d  S(   Ns    Should have raised HTTPError(%i)(   R   t   assertEqualt   status_codet   fail(   t   selft   statust   msgt   e(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   assertRaisesHTTPError&   s    	c         C  sN   | j  | ƒ } | j  | ƒ } t | | t j j | ƒ ƒ t j | | ƒ d S(   sJ   Make a symlink to src from dst

        src and dst are api_paths
        N(   R   R   R   t   patht   isfilet   symlink(   R   R   t   srct   dstt   src_os_patht   dst_os_path(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyR    0   s    c         C  s8   t  ƒ  ) } t d | ƒ } |  j | j | ƒ Wd  QXd  S(   Nt   root_dir(   R   R   R   R%   (   R   t   tdt   fm(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_root_dir:   s    c      
   C  sJ   t  ƒ  ; } t j j | d d d d ƒ } |  j t t d | ƒWd  QXd  S(   Nt   notebookt   dirt   ist   missingR%   (   R   R   R   t   joint   assertRaisesR	   R   (   R   R&   t   root(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_missing_root_dir?   s    c      	   C  s/   t  ƒ    } |  j t t d | j ƒWd  QXd  S(   NR%   (   R   R.   R	   R   t   name(   R   t   tf(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_invalid_root_dirD   s    c         C  sý   t  ƒ  î } | } t d | ƒ } | j d ƒ } d j d ƒ } t j j | j | Œ } |  j | | ƒ t d | ƒ } | j d ƒ } t j j | j d ƒ } |  j | | ƒ t d | ƒ } | j d ƒ } t j j | j d ƒ } |  j | | ƒ Wd  QXd  S(   NR%   s   /path/to/notebook/test.ipynbt   /s
   test.ipynbs   ////test.ipynb(	   R   R   R   t   splitR   R   R-   R%   R   (   R   R&   R/   R'   R   t   rel_path_listt   fs_path(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_get_os_pathH   s    c   	      C  sá   d } d } t  ƒ  i } | } t j t j j | | ƒ ƒ t d | ƒ } | j } | j d d ƒ } | j d d | ƒ } Wd  QX|  j | | ƒ |  j	 | t j j | | j
 | ƒ ƒ |  j	 | t j j | | | j
 | ƒ ƒ d  S(   Nu	   sub âˆ‚irs   test-cp.ipynbR%   t   cps
   test.ipynbs   /%s/test.ipynb(   R   R   t   mkdirR   R-   R   t   checkpointst   checkpoint_patht   assertNotEqualR   t   checkpoint_dir(	   R   t   subdt   cp_nameR&   R/   R'   t   cpmt   cp_dirt	   cp_subdir(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_checkpoint_subdir]   s    	%t   win32i    i   c      
   C  sÊ   t  ƒ  » } t d | ƒ } d } t | | ƒ | j d | d d ƒ } |  j | d d | d f ƒ | j | ƒ } d	 „  | d
 Dƒ } |  j d | k ƒ |  j | d | ƒ |  j d | k ƒ Wd  QXd  S(   NR%   s   test bad symlinkR   t   exts   .txtt   targets   %s/%ss   bad symlinkc         S  s   i  |  ] } | | d  “ q S(   R1   (    (   t   .0t   content(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pys
   <dictcomp>}   s   	 RI   s   untitled.txt(   R   R   R   t   new_untitledR    t   gett
   assertTrueR   (   R   R&   t   cmR   t
   file_modelt   modelt   contents(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_bad_symlinko   s    c   	   	   C  sÊ   t  ƒ  » } t d | ƒ } d } d } d j | | ƒ } t | | ƒ | j d | d ƒ } |  j | | d | ƒ | j | d t ƒ} | j | ƒ } |  j t	 | d d d	 „  ƒ| | g ƒ Wd  QXd  S(
   NR%   s   test good symlinks   good symlinks   {0}/{1}R   s	   /zfoo.txtRI   t   keyc         S  s   |  d S(   NR1   (    (   t   x(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   <lambda>”   t    (
   R   R   t   formatR   t   newR    RK   t   FalseR   t   sorted(	   R   R&   RM   t   parentR1   R   RN   t   symlink_modelt	   dir_model(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_good_symlink„   s    c      
   C  s  t  t d ƒ r3 t j ƒ  d k r3 t d ƒ ‚ q3 n  t j j d ƒ rT t d ƒ ‚ n  t ƒ  ­ } t d | ƒ } | j	 d d ƒ } | j
 | d	 ƒ } t j | d
 ƒ y, | j | d ƒ  } | j d ƒ Wd  QXWn& t k
 rø } |  j | j d ƒ n X|  j d ƒ Wd  QXd  S(   Nt   getuidi    s   Can't test permissions as roott   wins!   Can't test permissions on WindowsR%   t   typet   fileR   i   t   wu
   don't carei“  s!   Should have raised HTTPError(403)(   t   hasattrR   R^   R   t   syst   platformt
   startswithR   R   RJ   R   t   chmodt   opent   writeR   R   R   R   (   R   R&   RM   RO   R   t   fR   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_403˜   s     c         C  si  t  ƒ  Z} t d | ƒ } t t j j | j d d ƒ d ƒ  } | j d ƒ Wd  QXt t j j | j d d ƒ d ƒ  } | j d ƒ Wd  QX|  j d ƒ  | j	 d ƒ Wd  QX|  j d ƒ  | j	 d ƒ Wd  QX|  j d ƒ  | j
 d ƒ Wd  QX|  j d ƒ  | j d d	 ƒ Wd  QX|  j d ƒ 0 | j d
 i d d 6d d 6d d 6d d ƒ Wd  QXWd  QXd  S(   NR%   s   ..t   fooRb   t   bari”  s   foo/../../../bars   ../foos   ../barRO   Ra   R`   u    RI   t   textRV   R   (   R   R   Rh   R   R   R-   R%   Ri   R   RK   t   deletet   renamet   save(   R   R&   RM   Rj   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_escape_root­   s(    ''
N(   t   __name__t
   __module__R   t   NoneR   R    R(   R0   R3   R8   RD   t   dect   skipifRd   Re   t   version_infoRQ   R]   Rk   Rr   (    (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyR   $   s   		
					44	t   TestContentsManagerc           B  sÅ   e  Z e d d  „ ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         c  sS   | p d | } y	 d  VWn& t  k
 rA } |  j | j | ƒ n X|  j | ƒ d  S(   Ns    Should have raised HTTPError(%i)(   R   R   R   R   (   R   R   R   R   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyR   Ç   s    	c         C  sX   |  j  } |  j | ƒ | j d d j | d g ƒ ƒ | j d d j | d g ƒ ƒ d  S(   NR   R4   s   nb.ipynbs   file.txt(   R   t   make_dirRW   R-   (   R   R   RM   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   make_populated_dirÑ   s    	c         C  s	  |  j  j | ƒ } |  j | d | ƒ |  j | d d ƒ xÈ | d D]¼ } | d d k ra qE qE | d d k r± |  j | d d ƒ d j | d g ƒ } |  j | d | ƒ qE | d d	 k rE |  j | d d
 ƒ d j | d
 g ƒ } |  j | d | ƒ qE qE Wd  S(   NR   R`   t	   directoryRI   Ra   R1   s   file.txtR4   R)   s   nb.ipynb(   R   RK   R   R-   (   R   R   R\   t   entryt   complete_path(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   check_populated_dir_filesÙ   s    c         C  s4   t  ƒ  |  _ |  j j |  _ t d |  j ƒ |  _ d  S(   NR%   (   R   t	   _temp_dirR1   R&   R   R   (   R   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   setUpë   s    c         C  s   |  j  j ƒ  d  S(   N(   R€   t   cleanup(   R   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   tearDownò   s    c         C  s   t  |  j | ƒ d S(   so   make a subdirectory at api_path

        override in subclasses if contents are not on the filesystem.
        N(   R   R   (   R   R   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyRz   õ   s    c         C  sE   t  j d i d d 6ƒ } t  j d d | g ƒ} | j j | ƒ d  S(   Nt   display_datas   alert('hi');s   application/javascripts   print('hi')t   outputs(   t   nbformatt
   new_outputt   new_code_cellt   cellst   append(   R   t   nbt   outputt   cell(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   add_code_cellü   s    c         C  s   |  j  } | j d d ƒ } | d } | d } | j | ƒ } | d } t d t j ƒ  ƒ | d d <|  j | ƒ | j | | ƒ | | | f S(	   NR`   R)   R1   R   RI   g    €„.At   metadatat   counter(   R   RJ   RK   t   intt   timeRŽ   Rq   (   R   RM   RO   R1   R   t
   full_modelR‹   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   new_notebook  s    	


c         C  s,  |  j  } | j d d ƒ } t | t ƒ s0 t ‚ |  j d | ƒ |  j d | ƒ |  j d | ƒ |  j | d d ƒ |  j | d d ƒ |  j | d d ƒ | j d d ƒ } t | t ƒ sÃ t ‚ |  j d | ƒ |  j d | ƒ |  j d | ƒ |  j | d d ƒ |  j | d d ƒ |  j | d d ƒ | d } | j d | ƒ } t | t ƒ s`t ‚ |  j d | ƒ |  j d | ƒ |  j d | ƒ |  j | d d ƒ |  j | d d	 ƒ |  j | d d
 | ƒ | j d | d d ƒ } |  j | d d ƒ | j d | d d ƒ } |  j | d d ƒ d  S(   NR`   R)   R1   R   s   Untitled.ipynbR|   s   Untitled FolderRa   t   untitleds   %s/untitledRF   s   .foo.bars   untitled.foo.bars   untitled1.foo.bar(   R   RJ   t
   isinstancet   dictt   AssertionErrort   assertInR   (   R   RM   RO   t   sub_dir(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_new_untitled  s<    	
c   	      C  s¶   |  j  } |  j ƒ  \ } } } | j | ƒ } |  j | d ƒ | j | | ƒ | j | ƒ } |  j | d | d ƒ d } | j | | ƒ | j | ƒ } |  j | d | d ƒ d  S(   NRI   t   last_modifieds   renamed.ipynb(   R   R”   RK   RŽ   Rq   t   assertGreaterEqualRp   (	   R   RM   R‹   R1   R   RO   t   savedt   new_patht   renamed(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_modified_date5  s    	c         C  sC  |  j  } | j d d ƒ } | d } | d } | j | ƒ } t | t ƒ sS t ‚ |  j d | ƒ |  j d | ƒ |  j | d | ƒ |  j | d | ƒ | j | d t d d ƒ} |  j | d | ƒ |  j | d d ƒ |  j | d d ƒ |  j	 | d t ƒ | j | d t d d d d	 ƒ} |  j | d d	 ƒ d
 } |  j
 d ƒ | j d | d d ƒ } | j | | ƒ } t | t ƒ sŽt ‚ |  j d | ƒ |  j d | ƒ |  j d | ƒ |  j | d d ƒ |  j | d d j | j d ƒ | ƒ ƒ | j d | d d ƒ d }	 | j |	 ƒ }
 |  j i d d 6d d 6d d 6d d 6d d 6d d 6t d 6|
 ƒ |  j d |
 ƒ |  j d |
 ƒ |  j
 d ƒ | j d ƒ } |  j | d d ƒ |  j | d t ƒ |  j t | d ƒ d ƒ |  j | d d ƒ |  j | d d ƒ | j | | d t ƒ} | j d d t ƒ} | j d d t ƒ} |  j | d d ƒ |  j | d d ƒ x› | d D] } | d | d k r°|  j | | ƒ qƒ| d | d k r×|  j | | ƒ qƒ| d | d k rþ|  j | | ƒ qƒ|  j d  | ƒ  ƒ qƒW|  j t ƒ  | j d d d ƒWd  QXd  S(!   NR`   R)   R1   R   RI   Ra   RV   Rn   t   base64s   /foo/Rl   RF   s   .ipynbs   Untitled.ipynbs   {0}/{1}R4   s   .txtu    u   textu
   text/plaint   mimetypeu   untitled.txtu   foo/untitled.txtu   filet   writablet   createdRœ   s   foo/barR|   i   Rm   s   Unexpected directory entry: %s(   R   RJ   RK   R–   R—   R˜   R™   R   t   Truet   assertNotIsInstanceRz   RV   t   stript   assertDictContainsSubsett   assertIsInstancet   listt   lenRX   R   R.   R   (   R   RM   RO   R1   R   t   model2t
   nb_as_filet   nb_as_bin_fileRš   t   file_model_pathRN   t   dirmodelt   model2_no_contentt   file_model_no_contentt   sub_sub_dir_no_contentR}   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_getP  s~    	

!)c         C  s  |  j  } | j d d ƒ } | d } | d } d | d <| j | | ƒ } t | t ƒ s` t ‚ |  j d | ƒ |  j d | ƒ |  j | d d ƒ |  j t	 | j
 | ƒ d } |  j d ƒ | j d | d d ƒ } | d } | j d d	 ƒ d
 } | d } | d <| j | | ƒ } t | t ƒ s.t ‚ |  j d | ƒ |  j d | ƒ |  j | d d ƒ |  j | d | ƒ |  j t	 | j
 | ƒ d  S(   NR`   R)   R1   R   s
   test.ipynbs   /foo/Rl   R4   i   i    s   /test_in_sub.ipynbs   test_in_sub.ipynb(   R   RJ   t   updateR–   R—   R˜   R™   R   R.   R   RK   Rz   t   rsplit(   R   RM   RO   R1   R   Rš   t   dRŸ   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_update©  s0    	



c         C  sn  |  j  } | j d d ƒ } | d } | d } | j | ƒ } | j | | ƒ } t | t ƒ se t ‚ |  j d | ƒ |  j d | ƒ |  j | d | ƒ |  j | d | ƒ d } |  j	 d ƒ | j d | d d ƒ } | d } | d } | j | ƒ } | j | | ƒ } t | t ƒ s"t ‚ |  j d | ƒ |  j d | ƒ |  j | d d ƒ |  j | d d ƒ d  S(	   NR`   R)   R1   R   s   /foo/Rl   s   Untitled.ipynbs   foo/Untitled.ipynb(
   R   RJ   RK   Rq   R–   R—   R˜   R™   R   Rz   (   R   RM   RO   R1   R   R“   Rš   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt	   test_saveÏ  s.    	



c         C  s[   |  j  } |  j ƒ  \ } } } | j | ƒ |  j t | j | ƒ |  j t | j | ƒ d  S(   N(   R   R”   Ro   R.   R   RK   (   R   RM   R‹   R1   R   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_deleteò  s
    	c         C  sÀ  |  j  } |  j ƒ  \ } } } | j | d ƒ |  j t | j | ƒ t | j d ƒ t ƒ sb t ‚ d d d d d g } | d  } | d } x( | D]  } |  j	 | ƒ |  j
 | ƒ q’ WxC t | d ƒ D]2 \ }	 }
 |  j d ƒ  | j |	 |
 ƒ Wd  QXqÆ W|  j d	 ƒ  | j d
 d d ƒWd  QX| j d d
 ƒ x | D] } |  j
 | ƒ q<WxS | D]K } |  j d	 ƒ  | j | ƒ Wd  QX| j d d
 d ƒ } |  j
 | ƒ qZW| j d
 d d ƒd  S(   Nt   changed_pathRl   Rm   s   foo/bars   foo/bar/foos   foo/bar/foo/bari   i™  i”  s   foo/bar_diffRF   s   .ipynbi   (   R   R”   Rp   R.   R   RK   R–   R—   R˜   R{   R   R   R   RJ   t   replace(   R   RM   R‹   R1   R   t   all_dirst   unchanged_dirst   changed_dirst   _dirR!   t   destt	   unchangedt   changed_dirnamet   new_dirname(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_rename   s2    	

c         C  sH   |  j  } |  j t ƒ  } | j d ƒ Wd  QX|  j | j j d ƒ d  S(   NRU   i  (   R   R.   R   Ro   R   t	   exceptionR   (   R   RM   t   err(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_delete_root1  s    	c         C  sñ   |  j  } d } d } d j | | ƒ } |  j | ƒ | j d | ƒ } | j | ƒ } |  j | d | d j d d ƒ ƒ | j | d ƒ } |  j | d d	 ƒ |  j | d d ƒ | j | d
 ƒ } |  j | d | ƒ |  j | d | ƒ d  S(   Nu   Ã¥ bu   nb âˆš.ipynbu   {0}/{1}R   R1   s   .ipynbs   -Copy1.ipynbu   Ã¥ b/copy 2.ipynbu   copy 2.ipynbu   /(   R   RV   Rz   RW   t   copyR   R½   (   R   RM   RZ   R1   R   t   origRÊ   t   copy2(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt	   test_copy7  s    	$c         C  s†   |  j  } |  j ƒ  \ } } } | j | ƒ d } | j j | ƒ sJ t ‚ | j | ƒ | j | ƒ d } | j j | ƒ s‚ t ‚ d  S(   NRI   (   R   R”   RK   t   notaryt   check_cellsR˜   t   trust_notebook(   R   RM   R‹   R1   R   t	   untrustedt   trusted(    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_trust_notebookL  s    	c         C  sÃ   |  j  } |  j ƒ  \ } } } | j | | ƒ x6 | j D]+ } | j d k r8 | j j sc t ‚ q8 q8 W| j | ƒ | j	 | ƒ d } x5 | j D]* } | j d k r‘ | j j s» t ‚ q‘ q‘ Wd  S(   Nt   codeRI   (
   R   R”   t   mark_trusted_cellsR‰   t	   cell_typeR   RÒ   R˜   RÐ   RK   (   R   RM   R‹   R1   R   R   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_mark_trusted_cellsY  s    	c         C  s³   |  j  } |  j ƒ  \ } } } | j | | ƒ | j | | ƒ | j j | ƒ sW t ‚ | j | ƒ | j | ƒ d } | j | | ƒ | j | | ƒ | j j | ƒ s¯ t ‚ d  S(   NRI   (	   R   R”   RÕ   t   check_and_signRÎ   t   check_signatureR˜   RÐ   RK   (   R   RM   R‹   R1   R   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   test_check_and_signh  s    	N(   Rs   Rt   R   Ru   R   R{   R   R   Rƒ   Rz   RŽ   R”   R›   R¡   Rµ   R¹   Rº   R»   RÆ   RÉ   RÍ   RÓ   R×   RÚ   (    (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyRy   Æ   s*   									&		Y	&	#		1				t   TestContentsManagerNoAtomicc           B  s   e  Z d  Z d „  Z RS(   sQ   
    Make same test in no atomic case than in atomic case, using inheritance
    c         C  s@   t  ƒ  |  _ |  j j |  _ t d |  j ƒ |  _ t |  j _ d  S(   NR%   (   R   R€   R1   R&   R   R   RX   t   use_atomic_writing(   R   (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyR   |  s
    (   Rs   Rt   t   __doc__R   (    (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyRÛ   w  s   (!   RÝ   t
   __future__R    R   Rd   R’   t
   contextlibR   t	   itertoolsR   t   noseR   t   tornado.webR   t   unittestR   t   tempfileR   R†   R   t   ipython_genutils.tempdirR   t	   traitletsR	   t   ipython_genutils.testingR
   Rv   t   filemanagerR   R   R   Ry   RÛ   (    (    (    sL   lib/python2.7/site-packages/notebook/services/contents/tests/test_manager.pyt   <module>   s(   	¢ÿ ²