def test_author_colon_with_double_quotes():
    query = IQ('author:"tachikawa, yuji"', LiteratureSearch())

    expected = {
        "bool": {
            "must": [
              {
                "bool": {
                  "should": [
                    {
                      "match": {
                        "authors.name_variations": "tachikawa, yuji"
                      }
                    },
                    {
                      "term": {
                        "authors.inspire_bai": "tachikawa, yuji"
                      }
                    }
                  ]
                }
              }
            ],
            "should": [
              {
                "match": {
                  "authors.full_name": "tachikawa, yuji"
                }
              }
            ]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_find_author_uppercase():
    query = IQ('FIND A W F CHANG', LiteratureSearch())

    expected = {
        "bool": {
            "must": [
              {
                "bool": {
                  "should": [
                    {
                      "match": {
                        "authors.name_variations": "W F CHANG"
                      }
                    },
                    {
                      "term": {
                        "authors.inspire_bai": "W F CHANG"
                      }
                    }
                  ]
                }
              }
            ],
            "should": [
              {
                "match": {
                  "authors.full_name": "W F CHANG"
                }
              }
            ]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_find_exactauthor_not_affiliation_uppercase():
    query = IQ(
        'FIND EA RINALDI, MASSIMILIANO NOT AFF SINCROTRONE TRIESTE', LiteratureSearch())

    expected = {
        "bool": {
            "must_not": [
              {
                "multi_match": {
                  "query": "SINCROTRONE TRIESTE",
                  "fields": [
                    "authors.affiliations.value",
                    "corporate_author"
                  ]
                }
              }
            ],
            "must": [
              {
                "multi_match": {
                  "query": "RINALDI, MASSIMILIANO",
                  "fields": [
                    "exactauthor.raw",
                    "authors.full_name",
                    "authors.alternative_names",
                    "authors.inspire_bai"
                  ]
                }
              }
            ]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_google_style_and_not_collaboration():
    query = IQ("raffaele d'agnolo and not cn cms", LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_journal_colon():
    query = IQ('journal:TODO', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_type_code_colon():
    query = IQ('tc: l', LiteratureSearch())

    expected = {'multi_match': {'query': 'l', 'fields': ['collection']}}
    result = query.to_dict()

    assert expected == result
def test_exactauthor_colon():
    query = IQ('ea:matt visser', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_field_code_colon():
    query = IQ('fc: a', LiteratureSearch())

    expected = {'multi_match': {'query': 'a', 'fields': ['field_code']}}
    result = query.to_dict()

    assert expected == result
def test_find_date():
    query = IQ('fin date > today', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_citedby_colon_recid_colon():
    query = IQ('citedby:recid:902780', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_find_caption():
    query = IQ('Diagram for the fermion flow violating process', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_find_country_code():
    query = IQ('find cc italy', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_bai_malformed():
    query = IQ('a r.j.hill.1', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author():
    query = IQ('a kondrashuk', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_colon_bai():
    query = IQ('author:Y.Nomura.1', LiteratureSearch())

    expected = {
          'bool': {
            'must': [
              {
                'bool': {
                  'should': [
                    {
                      'match': {
                        u'authors.name_variations': 'Y.Nomura.1'
                      }
                    },
                    {
                      'term': {
                        u'authors.ids.value': 'Y.Nomura.1'
                      }
                    }
                  ]
                }
              }
            ],
            'should': [
              {
                'match': {
                  u'authors.full_name': 'Y.Nomura.1'
                }
              }
            ]
          }
        }
    result = query.to_dict()

    assert expected == result
def test_author_bai():
    query = IQ('find a r.j.hill.1', LiteratureSearch())

    expected = {
        "bool": {
            "must": [
              {
                "bool": {
                  "should": [
                    {
                      "match": {
                        "authors.name_variations": "r.j.hill.1"
                      }
                    },
                    {
                      "term": {
                        "authors.ids.value": "r.j.hill.1"
                      }
                    }
                  ]
                }
              }
            ],
            "should": [
              {
                "match": {
                  "authors.full_name": "r.j.hill.1"
                }
              }
            ]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_find_report():
    query = IQ('find r atlas-conf-*', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_citedby_colon():
    query = IQ('citedby:foobar', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_find_type_code():
    query = IQ('find tc book', LiteratureSearch())

    expected = {'multi_match': {'query': 'book', 'fields': ['collection']}}
    result = query.to_dict()

    assert expected == result
def test_eprint_colon_without_arxiv():
    query = IQ('eprint:TODO', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_or_author():
    query = IQ('a fileviez perez,p or p. f. perez', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_exactauthor_colon_and_collection_colon():
    query = IQ('ea: matt visser AND collection:citeable', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_and_not_author():
    query = IQ('a espinosa,jose r and not a rodriguez espinosa', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_fulltext_colon():
    query = IQ('fulltext:TODO', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_author_and_not_type_code():
    query = IQ('a nilles,h and not tc I', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_topcite_colon():
    query = IQ('topcite:200+', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_exactauthor():
    query = IQ('ea wu, xing gang')

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_google_style_or_google_style():
    query = IQ('sungtae cho or 1301.7261', LiteratureSearch())

    expected = {}
    result = query.to_dict()

    assert expected == result
def test_find_author():
    query = IQ('find a polchinski', LiteratureSearch())

    expected = {
        "bool": {
            "must": [
              {
                "bool": {
                  "should": [
                    {
                      "match": {
                        "authors.name_variations": "polchinski"
                      }
                    },
                    {
                      "term": {
                        "authors.inspire_bai": "polchinski"
                      }
                    }
                  ]
                }
              }
            ],
            "should": [
              {
                "match": {
                  "authors.full_name": "polchinski"
                }
              }
            ]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_author_colon_bai():
    query = IQ('author:Y.Nomura.1', LiteratureSearch())

    expected = {
        "bool": {
            "should": [
              {
                "match": {
                  "authors.name_variations": "Y.Nomura.1"
                }
              },
              {
                "match": {
                  "authors.full_name": "Y.Nomura.1"
                }
              },
              {
                "match": {
                  "authors.inspire_bai": "Y.Nomura.1"
                }
              }
            ]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_author_colon_or_author_colon_or_title_colon_or_title_colon():
    query = IQ(
        "(author:'Hiroshi Okada' OR (author:'H Okada' hep-ph) OR "
        "title: 'Dark matter in supersymmetric U(1(B-L) model' OR "
        "title: 'Non-Abelian discrete symmetry for flavors')",
        LiteratureSearch())

    expected = {
        'bool': {
            'should': [{
                'bool': {
                    'should': [{
                        'bool': {
                            'should': [{
                                'bool': {
                                    'must': [{
                                        'multi_match': {
                                            'query':
                                            'H Okada',
                                            'type':
                                            'phrase',
                                            'fields': [
                                                'authors.full_name',
                                                'authors.alternative_names'
                                            ]
                                        }
                                    }, {
                                        'multi_match': {
                                            'query': 'hep-ph',
                                            'fields': ['global_fulltext']
                                        }
                                    }]
                                }
                            }, {
                                'multi_match': {
                                    'query':
                                    'Hiroshi Okada',
                                    'type':
                                    'phrase',
                                    'fields': [
                                        'authors.full_name',
                                        'authors.alternative_names'
                                    ],
                                }
                            }]
                        }
                    }, {
                        'multi_match': {
                            'query':
                            'Dark matter in supersymmetric U(1(B-L) model',
                            'type':
                            'phrase',
                            'fields': [
                                'titles.title', 'titles.title.raw^2',
                                'title_translation.title', 'title_variation',
                                'title_translation.subtitle', 'titles.subtitle'
                            ]
                        }
                    }]
                }
            }, {
                'multi_match': {
                    'query':
                    'Non-Abelian discrete symmetry for flavors',
                    'type':
                    'phrase',
                    'fields': [
                        'titles.title', 'titles.title.raw^2',
                        'title_translation.title', 'title_variation',
                        'title_translation.subtitle', 'titles.subtitle'
                    ],
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_find_author_not_author_not_author():
    query = IQ('f a ostapchenko not olinto not haungs', LiteratureSearch())

    expected = {
        "bool": {
            "minimum_should_match":
            0,
            "must": [{
                "bool": {
                    "should": [{
                        "match": {
                            "authors.name_variations": "ostapchenko"
                        }
                    }, {
                        "term": {
                            "authors.inspire_bai": "ostapchenko"
                        }
                    }]
                }
            }],
            "must_not": [{
                "bool": {
                    "should": [{
                        "match": {
                            "authors.full_name": "olinto"
                        }
                    }],
                    "must": [{
                        "bool": {
                            "should": [{
                                "match": {
                                    "authors.name_variations": "olinto"
                                }
                            }, {
                                "term": {
                                    "authors.inspire_bai": "olinto"
                                }
                            }]
                        }
                    }]
                }
            }, {
                "bool": {
                    "must": [{
                        "bool": {
                            "should": [{
                                "match": {
                                    "authors.name_variations": "haungs"
                                }
                            }, {
                                "term": {
                                    "authors.inspire_bai": "haungs"
                                }
                            }]
                        }
                    }],
                    "should": [{
                        "match": {
                            "authors.full_name": "haungs"
                        }
                    }]
                }
            }],
            "should": [{
                "match": {
                    "authors.full_name": "ostapchenko"
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result
def test_find_author_and_date():
    query = IQ('find a hatta and date after 2000', LiteratureSearch())

    expected = {
        "bool": {
            "minimum_should_match":
            0,
            "should": [{
                "match": {
                    "authors.full_name": "hatta"
                }
            }],
            "must": [{
                "bool": {
                    "should": [{
                        "match": {
                            "authors.name_variations": "hatta"
                        }
                    }, {
                        "term": {
                            "authors.ids.value": "hatta"
                        }
                    }]
                }
            }, {
                "bool": {
                    "minimum_should_match":
                    1,
                    "should": [{
                        "bool": {
                            "should": [{
                                "bool": {
                                    "should": [{
                                        "range": {
                                            "imprints.date": {
                                                "gt": "2000"
                                            }
                                        }
                                    }, {
                                        "range": {
                                            "preprint_date": {
                                                "gt": "2000"
                                            }
                                        }
                                    }]
                                }
                            }, {
                                "range": {
                                    "thesis.date": {
                                        "gt": "2000"
                                    }
                                }
                            }]
                        }
                    }, {
                        "range": {
                            "publication_info.year": {
                                "gt": "2000"
                            }
                        }
                    }]
                }
            }]
        }
    }
    result = query.to_dict()

    assert expected == result