Можно ли использовать «экземпляр» макета домена в методе show () контроллеров? - PullRequest
0 голосов
/ 14 января 2011

Я пытаюсь передать проверенный экземпляр домена с именем событие методу show () контроллеров, но show () не может найти событие вВопрос и, следовательно, возвращает ноль.

Обратите внимание, что следующий фрагмент все еще в работе.

def "trying to show an event containing malicous code"() {
    given: "An event named with malicous code"
    mockDomain(Event)
    def event   = Mock(Event)
    event.title >> "<script type=\"text/javascript\">alert(\"XSS\");</script>"
    event.id    >> 1
    // Do I have to actually create a full-blown event considering all
    // constraints here?

    when: "I try to show that event"
    controller.params.id    = 1
    def result = controller.show()

    then: "The resulting title will be encoded HTML"
    result.eventInstance.title    == event.title.encodeAsHTML()
}

Это начало метода show () контроллеров:

def show = {
    def eventInstance = Event.get(params.id)

    // The event exists
    if (eventInstance) {
            // some processing here

            return [eventInstance: eventInstance, isSubscribed: sub ? true:false, sidebar: 'sidebar']
    }
  1. Есть ли простое решение или мне нужно будет создать полноценное событие, учитывающее все ограничения?
  2. Если Мне нужно создать полное событиегде бы я разместить соответствующий метод?(В настоящее время мы используем createEvent () метод в BootStrap.groovy для начальной настройки, поэтому повторять эту функцию здесь не СУХОЙ).

1 Ответ

1 голос
/ 14 января 2011

Попробуйте смоделировать объект Event следующим образом:

def event   = new Event()
event.title = "<script type=\"text/javascript\">alert(\"XSS\");</script>"
event.id    = 1 // optional 
mockDomain Event, [event]

Если вы не добавите экземпляр event к вызову mockDomain, вы не сможете получить его с помощью get

...