*** Settings ***
Documentation  WS Ressource REST 'messages'.

# On inclut les mots-clefs
Resource  resources/resources.robot
# On ouvre/ferme le navigateur au début/à la fin du Test Suite.
Suite Setup  For Suite Setup
Suite Teardown  For Suite Teardown


*** Test Cases ***
Constitution du jeu de données

    [Documentation]  Constitue le jeu de données.

    #
    &{args_petitionnaire} =  Create Dictionary
    ...  particulier_civilite=Monsieur
    ...  particulier_nom=LOUIS
    ...  particulier_prenom=Daniel
    ...  om_collectivite=MARSEILLE
    &{args_demande} =  Create Dictionary
    ...  dossier_autorisation_type_detaille=Permis de construire pour une maison individuelle et / ou ses annexes
    ...  demande_type=Dépôt Initial
    ...  om_collectivite=MARSEILLE
    #
    ${di} =  Ajouter la demande par WS  ${args_demande}  ${args_petitionnaire}
    ${di_id} =  Sans espace  ${di}
    Set Suite Variable  ${di_id}


REST

    [Documentation]  Ce TestCase vérifie la partie REST du WS
    ...  - la seule méthode disponible est le POST, les autres doivent retourner un code 400,
    ...  - les clés suivantes sont obligatoires dans le tableau JSON : type, date, emetteur, dossier_instruction, contenu. Si une des clés n'est pas présente ou si il y a une clé supplémentaire dans les données d'entrées, le WS doit retourner un code 400.

    ## Seule la méthode POST doit être disponible sur cette ressource
    ${json} =  Set Variable  { "type": ""}
    Vérifier le code retour du web service et vérifier que son message est  Get  messages/123  ${json}  400  La méthode GET n'est pas disponible sur cette ressource.
    Vérifier le code retour du web service et vérifier que son message est  Put  messages/123  ${json}  400  La méthode PUT n'est pas disponible sur cette ressource.
    Vérifier le code retour du web service et vérifier que son message est  Delete  messages/123  ${json}  400  La méthode DELETE n'est pas disponible sur cette ressource.

    ## Cinq clés sont obligatoires
    # sans la clé 'contenu'
    ${json} =  Set Variable  { "type": "", "date": "", "emetteur": "", "dossier_instruction": ""}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  La structure des données reçues n'est pas correcte.
    # sans la clé 'dossier_instruction'
    ${json} =  Set Variable  { "type": "", "date": "", "emetteur": "", "contenu": ""}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  La structure des données reçues n'est pas correcte.
    # sans la clé 'emetteur'
    ${json} =  Set Variable  { "type": "", "date": "", "dossier_instruction": "", "contenu": ""}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  La structure des données reçues n'est pas correcte.
    # sans la clé 'date'
    ${json} =  Set Variable  { "type": "", "emetteur": "", "dossier_instruction": "", "contenu": ""}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  La structure des données reçues n'est pas correcte.
    # sans la clé 'type'
    ${json} =  Set Variable  { "date": "", "emetteur": "", "dossier_instruction": "", "contenu": ""}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  La structure des données reçues n'est pas correcte.

    ## Aucune clé supplémentaire autorisée
    # avec une clé supplémentaire
    ${json} =  Set Variable  { "type": "", "date": "", "emetteur": "", "dossier_instruction": "", "contenu": "", "plop": ""}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  La structure des données reçues n'est pas correcte.


Métier

    [Documentation]  Ce TestCase vérifie la partie Métier du WS
    ...  - le type est conforme
    ...  - le contenu est conforme
    ...  - le dossier d'instruction existe
    ...  - la date est valide

    ##
    # essai avec un type de message qui n'existe pas
    ${json} =  Set Variable  { "type": "", "date": "12/06/2016 12:00", "emetteur": "instr", "dossier_instruction": "${di_id}", "contenu": ""}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  Le type de message n'est pas correct.

    ##
    # essai avec un type de message qui ne correspond pas aux clés présentes dans 'contenu'
    ${json} =  Set Variable  { "type": "ERP_ADS__PC__INFORMATION_COMPLETUDE_ERP_ACCESSIBILITE", "date": "12/06/2016 12:00", "emetteur": "instr", "dossier_instruction": "${di_id}", "contenu": { "Dossier à enjeux ERP": ""}}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  Le contenu du message n'est pas correct.
    # essai avec une valeur du contenu qui ne correspodn pas à une valeur attendue
    ${json} =  Set Variable  { "type": "ERP_ADS__PC__NOTIFICATION_DOSSIER_A_ENJEUX_ERP", "date": "12/06/2016 12:00", "emetteur": "instr", "dossier_instruction": "${di_id}", "contenu": { "Dossier à enjeux ERP": ""}}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  Le contenu du message n'est pas correct.
    # essai avec du contenu supplémentaire
    ${json} =  Set Variable  { "type": "ERP_ADS__PC__NOTIFICATION_DOSSIER_A_ENJEUX_ERP", "date": "12/06/2016 12:00", "emetteur": "instr", "dossier_instruction": "${di_id}", "contenu": { "Dossier à enjeux ERP": "Oui", "plop": ""}}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  Le contenu du message n'est pas correct.

    ##
    # essai avec un dossier d'instruction qui n'existe pas
    ${json} =  Set Variable  { "type": "ERP_ADS__PC__NOTIFICATION_DOSSIER_A_ENJEUX_ERP", "date": "12/06/2016 12:00", "emetteur": "instr", "dossier_instruction": "", "contenu": { "Dossier à enjeux ERP": "Oui"}}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  Le dossier spécifié dans le message n'existe pas.

    ##
    # essai avec une date incorrecte
    ${json} =  Set Variable  { "type": "ERP_ADS__PC__NOTIFICATION_DOSSIER_A_ENJEUX_ERP", "date": "", "emetteur": "instr", "dossier_instruction": "${di_id}", "contenu": { "Dossier à enjeux ERP": "Oui"}}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  400  La date n'est pas correcte.

    ##
    #
    ${json} =  Set Variable  { "type": "ERP_ADS__PC__NOTIFICATION_DOSSIER_A_ENJEUX_ERP", "date": "12/06/2016 12:00", "emetteur": "instr", "dossier_instruction": "${di_id}", "contenu": { "Dossier à enjeux ERP": "Oui"}}
    Vérifier le code retour du web service et vérifier que son message est  Post  messages  ${json}  200  Insertion du message 'ERP_ADS__PC__NOTIFICATION_DOSSIER_A_ENJEUX_ERP' OK.